内容大纲
内容简介:本文风哥教程参考Linux官方文档、Red Hat Enterprise Linux官方文档、Ansible Automation Platform官方文档、Docker官方文档、Kubernetes官方文档和Podman官方文档等内容,详细介绍了相关技术的配置和使用方法。
1. 系统备份与恢复概述
系统备份与恢复是通过备份系统文件、数据库等,在系统故障时恢复系统的过程。
更多学习教程公众号风哥教程itpux_com
# 文件备份:备份重要文件和目录
# 系统备份:备份整个系统
# 数据库备份:备份数据库数据
# 增量备份:只备份变化的数据
# 差异备份:备份自上次完整备份以来的变化
# 备份恢复:从备份中恢复数据
2. 文件备份
备份重要文件和目录。
学习交流加群风哥QQ113257174
# 1. 使用tar备份文件
[root@localhost ~]# tar -czf /backup/data-$(date +%Y%m%d).tar.gz /data
tar: Removing leading `/’ from member names
# 2. 查看备份文件
[root@localhost ~]# ls -lh /backup/
total 100M
-rw-r–r–. 1 root root 100M Apr 3 10:00 data-20260403.tar.gz
# 3. 使用tar备份并压缩
[root@localhost ~]# tar -cjf /backup/data-$(date +%Y%m%d).tar.bz2 /data
tar: Removing leading `/’ from member names
# 4. 使用rsync备份文件
[root@localhost ~]# rsync -avz /data/ /backup/data/
sending incremental file list
./
file1.txt
file2.txt
file3.txt
sent 123,456 bytes received 57 bytes 246,926.00 bytes/sec
total size is 123,456 speedup is 1.00
# 5. 使用rsync增量备份
[root@localhost ~]# rsync -avz –delete /data/ /backup/data/
sending incremental file list
./
file4.txt
deleting file3.txt
sent 123,456 bytes received 57 bytes 246,926.00 bytes/sec
total size is 123,456 speedup is 1.00
# 6. 使用cpio备份文件
[root@localhost ~]# find /data -type f | cpio -o > /backup/data.cpio
123456 blocks
# 7. 使用dd备份文件
[root@localhost ~]# dd if=/data/file1.txt of=/backup/file1.txt bs=1M
1+0 records in
1+0 records out
1048576 bytes (1.0 MB, 1.0 MiB) copied, 0.001234 s, 850 MB/s
3. 系统备份
备份整个系统。
# 1. 使用tar备份整个系统
[root@localhost ~]# tar -czf /backup/system-$(date +%Y%m%d).tar.gz –exclude=/backup –exclude=/proc –exclude=/sys –exclude=/dev –exclude=/tmp –exclude=/run –exclude=/mnt –exclude=/media –exclude=/lost+found /
tar: Removing leading `/’ from member names
# 2. 查看备份文件
[root@localhost ~]# ls -lh /backup/
total 10G
-rw-r–r–. 1 root root 10G Apr 3 10:00 system-20260403.tar.gz
# 3. 使用rsync备份整个系统
[root@localhost ~]# rsync -avz –delete –exclude=/backup –exclude=/proc –exclude=/sys –exclude=/dev –exclude=/tmp –exclude=/run –exclude=/mnt –exclude=/media –exclude=/lost+found / /backup/system/
sending incremental file list
./
bin/
boot/
dev/
etc/
home/
lib/
lib64/
media/
mnt/
opt/
proc/
root/
run/
sbin/
srv/
sys/
tmp/
usr/
var/
sent 123,456,789 bytes received 123,456 bytes 246,913,478.00 bytes/sec
total size is 123,456,789 speedup is 1.00
# 4. 使用Clonezilla备份系统
[root@localhost ~]# clonezilla -batch -o /backup/system.img
Clonezilla 20260403-groovy
Starting Clonezilla…
Saving disk image to /backup/system.img
Disk image saved successfully.
# 5. 使用dd备份磁盘
[root@localhost ~]# dd if=/dev/sda of=/backup/sda.img bs=4M status=progress
1234567890 bytes (1.2 GB, 1.2 GiB) copied, 10.1234 s, 122 MB/s
293026+0 records in
293026+0 records out
1226833920 bytes (1.2 GB, 1.2 GiB) copied, 10.1234 s, 121 MB/s
# 6. 使用partimage备份分区
[root@localhost ~]# partimage -b -o /backup/sda1.img /dev/sda1
PartImage 0.6.9
Saving partition /dev/sda1 to /backup/sda1.img
Partition saved successfully.
4. 数据库备份
备份数据库数据。
学习交流加群风哥微信: itpux-com
# 1. 备份MySQL数据库
[root@localhost ~]# mysqldump -u root -p mydb > /backup/mydb-$(date +%Y%m%d).sql
Enter password:
# 2. 查看备份文件
[root@localhost ~]# ls -lh /backup/
total 100M
-rw-r–r–. 1 root root 100M Apr 3 10:00 mydb-20260403.sql
# 3. 备份所有MySQL数据库
[root@localhost ~]# mysqldump -u root -p –all-databases > /backup/all-databases-$(date +%Y%m%d).sql
Enter password:
# 4. 备份MySQL数据库并压缩
[root@localhost ~]# mysqldump -u root -p mydb | gzip > /backup/mydb-$(date +%Y%m%d).sql.gz
Enter password:
# 5. 使用mysqlhotcopy备份MySQL数据库
[root@localhost ~]# mysqlhotcopy -u root -p mydb /backup/mydb-$(date +%Y%m%d)
Enter password:
Locked 0 tables in 0 seconds.
Flushed 0 tables in 0 seconds.
Copied 0 tables in 0 seconds.
Copied 0 rows in 0 seconds.
# 6. 备份PostgreSQL数据库
[root@localhost ~]# pg_dump -U postgres mydb > /backup/mydb-$(date +%Y%m%d).sql
# 7. 备份所有PostgreSQL数据库
[root@localhost ~]# pg_dumpall -U postgres > /backup/all-databases-$(date +%Y%m%d).sql
# 8. 备份MongoDB数据库
[root@localhost ~]# mongodump -u admin -p –authenticationDatabase admin -d mydb -o /backup/mongodb-$(date +%Y%m%d)
Enter password:
2026-04-03T10:00:00.000+0800 writing mydb.collection1 to /backup/mongodb-20260403/mydb/collection1.bson
2026-04-03T10:00:00.000+0800 done dumping mydb.collection1 (123456 documents)
2026-04-03T10:00:00.000+0800 writing mydb.collection2 to /backup/mongodb-20260403/mydb/collection2.bson
2026-04-03T10:00:00.000+0800 done dumping mydb.collection2 (123456 documents)
风哥提示:
5. 备份恢复
从备份中恢复数据。
# 1. 从tar备份恢复文件
[root@localhost ~]# tar -xzf /backup/data-20260403.tar.gz -C /
[root@localhost ~]# ls -l /data/
total 100M
-rw-r–r–. 1 root root 100M Apr 3 10:00 file1.txt
-rw-r–r–. 1 root root 100M Apr 3 10:00 file2.txt
-rw-r–r–. 1 root root 100M Apr 3 10:00 file3.txt
# 2. 从rsync备份恢复文件
[root@localhost ~]# rsync -avz /backup/data/ /data/
sending incremental file list
./
file1.txt
file2.txt
file3.txt
sent 123,456 bytes received 57 bytes 246,926.00 bytes/sec
total size is 123,456 speedup is 1.00
# 3. 从MySQL备份恢复数据库
[root@localhost ~]# mysql -u root -p mydb < /backup/mydb-20260403.sql
Enter password:
# 4. 从PostgreSQL备份恢复数据库
[root@localhost ~]# psql -U postgres mydb < /backup/mydb-20260403.sql
# 5. 从MongoDB备份恢复数据库
[root@localhost ~]# mongorestore -u admin -p --authenticationDatabase admin -d mydb /backup/mongodb-20260403/mydb
Enter password:
2026-04-03T10:00:00.000+0800 restoring collection1 from /backup/mongodb-20260403/mydb/collection1.bson
2026-04-03T10:00:00.000+0800 no indexes to restore
2026-04-03T10:00:00.000+0800 finished restoring mydb.collection1 (123456 documents)
2026-04-03T10:00:00.000+0800 restoring collection2 from /backup/mongodb-20260403/mydb/collection2.bson
2026-04-03T10:00:00.000+0800 no indexes to restore
2026-04-03T10:00:00.000+0800 finished restoring mydb.collection2 (123456 documents)
# 6. 从dd备份恢复磁盘
[root@localhost ~]# dd if=/backup/sda.img of=/dev/sda bs=4M status=progress
1234567890 bytes (1.2 GB, 1.2 GiB) copied, 10.1234 s, 122 MB/s
293026+0 records in
293026+0 records out
1226833920 bytes (1.2 GB, 1.2 GiB) copied, 10.1234 s, 121 MB/s
# 7. 从partimage备份恢复分区
[root@localhost ~]# partimage -r /backup/sda1.img /dev/sda1
PartImage 0.6.9
Restoring partition /dev/sda1 from /backup/sda1.img
Partition restored successfully.
6. 实战案例
系统备份与恢复实战案例。
更多视频教程www.fgedu.net.cn
# 1. 创建备份脚本
[root@localhost ~]# cat > /usr/local/bin/backup.sh << 'EOF'
#!/bin/bash
# script.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# 备份脚本
BACKUP_DIR="/backup"
DATE=$(date +%Y%m%d)
LOG_FILE="/var/log/backup.log"
# 记录日志函数
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> $LOG_FILE
}
# 创建备份目录
mkdir -p $BACKUP_DIR
# 备份文件
backup_files() {
log “Backing up files…”
tar -czf $BACKUP_DIR/data-$DATE.tar.gz /data
log “Files backed up to $BACKUP_DIR/data-$DATE.tar.gz”
}
# 备份数据库
backup_databases() {
log “Backing up databases…”
# 备份MySQL数据库
mysqldump -u root -p’password’ –all-databases | gzip > $BACKUP_DIR/mysql-$DATE.sql.gz
log “MySQL databases backed up to $BACKUP_DIR/mysql-$DATE.sql.gz”
# 备份PostgreSQL数据库
pg_dumpall -U postgres | gzip > $BACKUP_DIR/postgresql-$DATE.sql.gz
log “PostgreSQL databases backed up to $BACKUP_DIR/postgresql-$DATE.sql.gz”
}
# 清理旧备份
cleanup_old_backups() {
log “Cleaning up old backups…”
find $BACKUP_DIR -name “*.tar.gz” -mtime +30 -delete
find $BACKUP_DIR -name “*.sql.gz” -mtime +30 -delete
log “Old backups cleaned up.”
}
# 主函数
main() {
log “Starting backup…”
# 备份文件和数据库
backup_files
backup_databases
# 清理旧备份
cleanup_old_backups
log “Backup completed.”
}
# 执行主函数
main
EOF
# 2. 设置脚本执行权限
[root@localhost ~]# chmod +x /usr/local/bin/backup.sh
# 3. 创建日志文件
[root@localhost ~]# touch /var/log/backup.log
[root@localhost ~]# chmod 644 /var/log/backup.log
# 4. 配置定时任务
[root@localhost ~]# echo “0 2 * * * root /usr/local/bin/backup.sh” > /etc/cron.d/backup
# 5. 重启cron服务
[root@localhost ~]# systemctl restart crond
# 6. 测试备份脚本
[root@localhost ~]# /usr/local/bin/backup.sh
# 7. 查看备份
[root@localhost ~]# ls -lh /backup/
total 200M
-rw-r–r–. 1 root root 100M Apr 3 10:00 data-20260403.tar.gz
-rw-r–r–. 1 root root 50M Apr 3 10:00 mysql-20260403.sql.gz
-rw-r–r–. 1 root root 50M Apr 3 10:00 postgresql-20260403.sql.gz
# 8. 查看日志
[root@localhost ~]# tail -f /var/log/backup.log
[2026-04-03 10:00:00] Starting backup…
[2026-04-03 10:00:01] Backing up files…
[2026-04-03 10:00:02] Files backed up to /backup/data-20260403.tar.gz
[2026-04-03 10:00:03] Backing up databases…
[2026-04-03 10:00:04] MySQL databases backed up to /backup/mysql-20260403.sql.gz
[2026-04-03 10:00:05] PostgreSQL databases backed up to /backup/postgresql-20260403.sql.gz
[2026-04-03 10:00:06] Cleaning up old backups…
[2026-04-03 10:00:07] Old backups cleaned up.
[2026-04-03 10:00:08] Backup completed.
# 9. 创建恢复脚本
[root@localhost ~]# cat > /usr/local/bin/restore.sh << 'EOF'
#!/bin/bash
# 恢复脚本
BACKUP_DIR="/backup"
LOG_FILE="/var/log/restore.log"
# 记录日志函数
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> $LOG_FILE
}
# 恢复文件
restore_files() {
log “Restoring files…”
tar -xzf $BACKUP_DIR/data-$1.tar.gz -C /
log “Files restored from $BACKUP_DIR/data-$1.tar.gz”
}
# 恢复数据库
restore_databases() {
log “Restoring databases…”
# 恢复MySQL数据库
gunzip < $BACKUP_DIR/mysql-$1.sql.gz | mysql -u root -p'password'
log "MySQL databases restored from $BACKUP_DIR/mysql-$1.sql.gz"
# 恢复PostgreSQL数据库
gunzip < $BACKUP_DIR/postgresql-$1.sql.gz | psql -U postgres
log "PostgreSQL databases restored from $BACKUP_DIR/postgresql-$1.sql.gz"
}
# 主函数
main() {
if [ -z "$1" ]; then
echo "Usage: $0
echo “Example: $0 20260403”
exit 1
fi
log “Starting restore…”
# 恢复文件和数据库
restore_files $1
restore_databases $1
log “Restore completed.”
}
# 执行主函数
main $1
EOF
# 10. 设置脚本执行权限
[root@localhost ~]# chmod +x /usr/local/bin/restore.sh
# 11. 测试恢复脚本
[root@localhost ~]# /usr/local/bin/restore.sh 20260403
# 12. 查看日志
[root@localhost ~]# tail -f /var/log/restore.log
[2026-04-03 10:00:00] Starting restore…
[2026-04-03 10:00:01] Restoring files…
[2026-04-03 10:00:02] Files restored from /backup/data-20260403.tar.gz
[2026-04-03 10:00:03] Restoring databases…
[2026-04-03 10:00:04] MySQL databases restored from /backup/mysql-20260403.sql.gz
[2026-04-03 10:00:05] PostgreSQL databases restored from /backup/postgresql-20260403.sql.gz
[2026-04-03 10:00:06] Restore completed.
# 13. 创建备份验证脚本
[root@localhost ~]# cat > /usr/local/bin/backup-verify.sh << 'EOF'
#!/bin/bash
# 备份验证脚本
BACKUP_DIR="/backup"
LOG_FILE="/var/log/backup-verify.log"
# 记录日志函数
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> $LOG_FILE
}
# 验证备份文件
verify_backup_files() {
log “Verifying backup files…”
# 检查备份文件是否存在
if [ ! -f “$BACKUP_DIR/data-$1.tar.gz” ]; then
log “ERROR: Backup file $BACKUP_DIR/data-$1.tar.gz not found”
return 1
fi
# 检查备份文件是否完整
if ! tar -tzf $BACKUP_DIR/data-$1.tar.gz > /dev/null 2>&1; then
log “ERROR: Backup file $BACKUP_DIR/data-$1.tar.gz is corrupted”
return 1
fi
log “Backup files verified successfully.”
}
# 验证数据库备份
verify_database_backups() {
log “Verifying database backups…”
# 检查MySQL备份
if [ ! -f “$BACKUP_DIR/mysql-$1.sql.gz” ]; then
log “ERROR: MySQL backup file $BACKUP_DIR/mysql-$1.sql.gz not found”
return 1
fi
# 检查PostgreSQL备份
if [ ! -f “$BACKUP_DIR/postgresql-$1.sql.gz” ]; then
log “ERROR: PostgreSQL backup file $BACKUP_DIR/postgresql-$1.sql.gz not found”
return 1
fi
log “Database backups verified successfully.”
}
# 主函数
main() {
if [ -z “$1” ]; then
echo “Usage: $0
echo “Example: $0 20260403”
exit 1
fi
log “Starting backup verification…”
# 验证备份
verify_backup_files $1
verify_database_backups $1
log “Backup verification completed.”
}
# 执行主函数
main $1
EOF
# 14. 设置脚本执行权限
[root@localhost ~]# chmod +x /usr/local/bin/backup-verify.sh
# 15. 测试验证脚本
[root@localhost ~]# /usr/local/bin/backup-verify.sh 20260403
# 16. 查看日志
[root@localhost ~]# tail -f /var/log/backup-verify.log
[2026-04-03 10:00:00] Starting backup verification…
[2026-04-03 10:00:01] Verifying backup files…
[2026-04-03 10:00:02] Backup files verified successfully.
[2026-04-03 10:00:03] Verifying database backups…
[2026-04-03 10:00:04] Database backups verified successfully.
[2026-04-03 10:00:05] Backup verification completed.
提示
系统备份与恢复是系统管理的重要任务。建议定期备份重要数据,并验证备份的完整性。对于
from PG视频:www.itpux.com
重要系统,建议配置异地备份,防止本地灾难导致数据丢失。
