1. 首页 > Linux教程 > 正文

Linux教程FG494-Linux灾难恢复实战

内容简介:本文风哥教程参考Linux官方文档、Red Hat Enterprise Linux官方文档、Ansible Automation Platform官方文档、Docker官方文档、Kubernetes官方文档和Podman官方文档等内容,详细介绍了相关技术的配置和使用方法。

<

风哥提示:

p>本文档介绍Linux灾难恢复实战案例。

Part01-系统备份策略

1.1 完整系统备份

# 创建备份目录
[root@fgedu-backup ~]# mkdir -p /backup/{system,data,config}

# 使用tar进行系统备份
[root@fgedu-backup ~]# cat > /usr/local/bin/system-backup.sh << 'EOF' #!/bin/bash # system-backup.sh # from:www.itpux.com.qq113257174.wx:itpux-com # web: http://www.fgedu.net.cn BACKUP_DIR="/backup/system" DATE=$(date +%Y%m%d) HOSTNAME=$(hostname) echo "=== 系统备份开始 ===" echo "备份时间: $(date)" # 备份系统配置 tar -czpf $BACKUP_DIR/${HOSTNAME}-config-${DATE}.tar.gz \ --exclude=/proc \ --exclude=/sys \ --exclude=/dev \ --exclude=/run \ --exclude=/tmp \ --exclude=/var/cache \ --exclude=/var/log \ /etc # 备份关键数据 tar -czpf $BACKUP_DIR/${HOSTNAME}-data-${DATE}.tar.gz \ /home \ /var/spool/cron \ /var/www \ /var/lib/mysql # 备份已安装软件列表 rpm -qa > $BACKUP_DIR/${HOSTNAME}-packages-${DATE}.txt

# 备份分区信息
fdisk -l > $BACKUP_DIR/${HOSTNAME}-partitions-${DATE}.txt
df -h > $BACKUP_DIR/${HOSTNAME}-disk-usage-${DATE}.txt

# 清理旧备份(保留7天)
find $BACKUP_DIR -name “*.tar.gz” -mtime +7 -delete

echo “备份完成: $BACKUP_DIR”
echo “=== 备份结束 ===”
EOF

[root@fgedu-backup ~]# chmod +x /usr/local/bin/system-backup.sh

# 使用rsync增量备份
[root@fgedu-backup ~]# cat > /usr/local/bin/rsync-backup.sh << 'EOF' #!/bin/bash # rsync-backup.sh # from:www.itpux.com.qq113257174.wx:itpux-com # web: http://www.fgedu.net.cn BACKUP_SERVER="192.168.1.200" BACKUP_PATH="/backup/$(hostname)" DATE=$(date +%Y%m%d) rsync -avz --delete \ --exclude='/proc' \ --exclude='/sys' \ --exclude='/dev' \ --exclude='/run' \ --exclude='/tmp' \ --exclude='/var/cache' \ / root@${BACKUP_SERVER}:${BACKUP_PATH}/current/ # 创建硬链接快照 ssh root@${BACKUP_SERVER} "cp -al ${BACKUP_PATH}/current ${BACKUP_PATH}/${DATE}" EOF [root@fgedu-backup ~]# chmod +x /usr/local/bin/rsync-backup.sh

Part02-数据库备份

2.1 数据库备份策略

# MySQL备份脚本
[root@fgedu-backup ~]# cat > /usr/local/bin/mysql-backup.sh << 'EOF' #!/bin/bash # mysql-backup.sh # from:www.itpux.com.qq113257174.wx:itpux-com # web: http://www.fgedu.net.cn BACKUP_DIR="/backup/mysql" MYSQL_USER="root" MYSQL_PASS="MySQL@123" DATE=$(date +%Y%m%d) TIME=$(date +%H%M%S) mkdir -p $BACKUP_DIR/$DATE echo "=== MySQL备份开始 ===" # 全库备份 mysqldump -u$MYSQL_USER -p$MYSQL_PASS --all-databases \ --single-transaction \ --routines \ --triggers \ --events \ --master-data=2 \ --flush-logs \ | gzip > $BACKUP_DIR/$DATE/all-databases-${TIME}.sql.gz

# 分库备份
for db in $(mysql -u$MYSQL_USER -p$MYSQL_PASS -e “show databases” | grep -v Database | grep -v information_schema | grep -v performance_schema); do
mysqldump -u$MYSQL_USER -p$MYSQL_PASS $db | gzip > $BACKUP_DIR/$DATE/${db}-${TIME}.sql.gz
done

# 备份binlog
mysql -u$MYSQL_USER -p$MYSQL_PASS -e “flush logs”
BINLOG_DIR=$(mysql -u$MYSQL_USER -p$MYSQL_PASS -e “show variables like ‘log_bin_basename'” | tail -1 | awk ‘{print $2}’)
cp ${BINLOG_DIR%/*}/mysql-bin.* $BACKUP_DIR/$DATE/

# 清理旧备份(保留30天)
find $BACKUP_DIR -type d -mtime +30 -exec rm -rf {} \;

echo “备份完成: $BACKUP_DIR/$DATE”
echo “=== MySQL备份结束 ===”
EOF

[root@fgedu-backup ~]# chmod +x /usr/local/bin/mysql-backup.sh

# 配置定时备份
[root@fgedu-backup ~]# cat >> /etc/crontab << 'EOF' 0 2 * * * root /usr/local/bin/system-backup.sh >> /var/log/backup.log 2>&1
0 3 * * * root /usr/local/bin/mysql-backup.sh >> /var/log/backup.log 2>&1
EOF

Part03-系统恢复

3.1 系统恢复操作

# 恢复系统配置
[root@fgedu-restore ~]# tar -xzpf /backup/system/fgedu-server-config-20260404.tar.gz -C /

# 恢复MySQL数据
[root@fgedu-restore ~]# gunzip < /backup/mysql/20260404/all-databases-030000.sql.gz | mysql -u root -p # 使用救援模式恢复 # 1. 从安装介质启动 # 2. 进入救援模式 # 3. 挂载系统分区 [root@fgedu-restore ~]# mkdir /mnt/sysimage [root@fgedu-restore ~]# mount /dev/mapper/vg_root-lv_root /mnt/sysimage [root@fgedu-restore ~]# mount /dev/sda1 /mnt/sysimage/boot # 恢复系统 [root@fgedu-restore ~]# tar -xzpf /backup/system/fgedu-server-system-20260404.tar.gz -C /mnt/sysimage # 重建引导 [root@fgedu-restore ~]# chroot /mnt/sysimage [root@fgedu-restore /]# grub2-install /dev/sda [root@fgedu-restore /]# grub2-mkconfig -o /boot/grub2/grub.cfg [root@fgedu-restore /]# exit # 恢复LVM [root@fgedu-restore ~]# vgcfgrestore -f /etc/lvm/archive/vg_root_12345.vg vg_root [root@fgedu-restore ~]# vgchange -ay

Part04-灾备演练

4.1 灾备演练脚本

# 创建灾备演练脚本
[root@fgedu-backup ~]# cat > /usr/local/bin/dr-drill.sh << 'EOF' #!/bin/bash # dr-drill.sh # from:www.itpux.com.qq113257174.wx:itpux-com # web: http://www.fgedu.net.学习交流加群风哥微信: itpux-comcn DR_SERVER="192.168.1.200" DR_USER="root" SERVICES="nginx mysql redis" echo "=== 灾备演练开始 ===" echo "演练时间: $(date)" echo "" echo "1. 检查备份完整性" echo "----------------------------------------" for backup in system mysql config; do latest=$(ls -t /backup/$backup/*.tar.gz 2>/dev/null | head -1)
if [ -n “$latest” ]; then
size=$(du -h “$latest” | awk ‘{print $1}’)
echo “$backup: $latest ($size)”
else
echo “$backup: 无备份文件!”
fi
done

echo “”
echo “2. 验证备份数据”
echo “—————————————-”
echo “验证最新MySQL备份…”
latest_mysql=$(ls -t /backup/mysql/*/all-databases-*.sql.gz 2>/dev/null | head -1)
if [ -n “$latest_mysql” ]; then
zcat $latest_mysql | head -5
fi

echo “”
echo “3. 测试灾备服务器连接”
echo “—————————————-”
ping -c 2 $DR_SERVER > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo “灾备服务器可达”
else
echo “警告: 灾备服务器不可达!”
fi

echo “”
echo “4. 检查灾备服务器服务状态”
echo “—————————————-”
for svc in $SERVICES; do
status=$(ssh $DR_USER@$DR_SERVER “systemctl is-active $svc” 2>/dev/null)
echo “$svc: $status”
done

echo “”
echo “5. 模拟故障切换”
echo “—————————————-”
echo “是否执行故障切换演练? (y/n)”
read confirm
if [ “$confirm” == “y” ]; then
echo “执行故障切换…”
ssh $DR_USER@$DR_SERVER “systemctl start nginx mysql redis”
echo “灾备服务已启动”
fi

echo “”
echo “=== 灾备演练完成 ===”
EOF

[root@fgedu-backup ~]# chmod +x /usr/local/bin/dr-drill.sh

# 执行灾备演练
[root@fgedu-backup ~]# /usr/local/bin/dr-drill.sh
=== 灾备演练开始 ===
演练时间: Sat Apr 4 23:00:00 CST 2026

1. 检查备份完整性
—————————————-
system: /backup/system/fgedu-server-system-20260404.tar.gz (500M)
mysql: /backup/mysql/20260404/all-databases-030000.sql.更多视频教程www.fgedu.net.cngz (1.2G)
config: /backup/config/fgedu-server-config-20260404.tar.gz (10M)

2. 验证备份数据
—————————————-
验证最新MySQL备份…
— MySQL dump 10.13 Distrib 8.0.32, for Linux (x86_64)

— Host: localhost Database:
— ———————更多学习教程公众号风哥教程itpux_com———————————
— Server version 8.0.32

3. 测试灾备服务器连接
—————————————-
灾备服务器可达

4. 检查灾备服务器服务状态
—————————————-
nginx: active
mysql: active
redis: active

5. 模拟故障切换
—————————————-
是否执行故障切换演练? (y/n)

风哥针对灾难恢复建议:

  • 制定完善的备份策略
  • 定期测试备份恢复
  • 建立灾备站点
  • 定期进行灾备演练
  • 文档化恢复流程

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息