内容简介:本文风哥教程参考Linux官方文档、Red Hat Enterprise Linux官方文档、Ansible Automation Platform官方文档、Docker官方文档、Kubernetes官方文档和Podman官方文档等内容,详细介绍了相关技术的配置和使用方法。
风哥提示:
本文档介绍存储备份策略的设计和实施方法。
Part01-备份策略设计
1.1 备份类型选择
[root@backup-server ~]# cat > /root/backup-strategy.txt << 'EOF' 备份策略设计 ============ 1. 备份类型 - 全量备份:备份所有数据 - 增量备份:备份变化的数据 - 差异备份:备份自上次全量备份后的变化 2. 备份频率 - 关键数据:每日全量备份 - 重要数据:每周全量+每日增量 - 一般数据:每月全量备份 3. 备份保留 - 日备份:保留7天 - 周备份:保留4周 - 月备份:保留12个月 - 年备份:保留3年 4. 备份介质 - 本地磁盘:快速恢复 - 网络存储:异地备份 - 磁带库:长期归档 - 云存储:异地容灾 5. 备份验证 - 定期恢复测试 - 数据完整性校验 - 备份日志审计 EOF # 创建备份目录结构 [root@backup-server ~]# mkdir -p /backup/{daily,weekly,monthly,yearly} [root@backup-server ~]# tree /backup /backup ├── daily ├── monthly ├── weekly └── yearly 4 directories, 0 files
1.2 使用rsync备份
[root@backup-server ~]# dnf install -y rsync
# 基本备份命令
[root@backup-server ~]# rsync -avz /data/ /backup/daily/data/
sending incremental file list
./
file1.txt
file2.txt
dir1/
d学习交流加群风哥微信: itpux-comir1/file3.txt
sent 1,234 bytes received 500 bytes 3,468.00 bytes/sec
total size is 10,000 speedup is 5.76
# 使用–delete同步删除
[root@backup-server ~]# rsync -avz –delete /data/ /backup/daily/data/
sending incremental file list
deleting old_file.txt
sent 1,000 bytes received 200 bytes 2,400.00 bytes/sec
total size is 10,000 speedup is 8.33
# 使用–exclude排除文件
[root@backup-server ~]# rsync -avz –delete –exclude=’*.log’ –exclude=’tmp/’ /data/ /backup/daily/data/
# 使用–link-dest实现增量备份
[root@backup-server ~]# DATE=$(date +%Y%m%d)
[root@backup-server ~]# rsync -avz –delete –link-dest=/backup/daily/data-latest /data/ /backup/daily/data-$DATE/
sending incremental file list
./
file1.txt
file2.txt
sent 1,500 bytes received 300 bytes 3,600.00 bytes/sec
total size is 10,000 speedup is 5.56
[root@backup-server ~]# ln -sfn /backup/daily/data-$DATE /backup/daily/data-latest
# 远程备份
[root@backup-server ~]# rsync -avz -e ssh /data/ root@remote-server:/backup/data/
root@remote-server’s password:
sending incremental file list
./
file1.txt
file2.txt
sent 1,500 bytes received 300 bytes 600.00 bytes/sec
total size is 10,000 speedup is 5.56
# 使用SSH密钥免密备份
[root@backup-server ~]# ssh-keygen -t rsa -N ” -f ~/.ssh/id_rsa
Generating public/private rsa key pair.
Your identification has been saved in /root/.ssh/id_rsa
Your public key has been saved in /root/.ssh/id_rsa.pub
[root@backup-server ~]# ssh-copy-id root@remote-server
/usr/bin/ssh-copy-id: INFO: Source of 更多学习教程公众号风哥教程itpux_comkey(s) to be installed: “/root/.ssh/id_rsa.pub”
root@remote-server’s password:
Number of key(s) added: 1
Now try logging into the machine, with: “ssh ‘root@remote-server'”
and check to make sure that only the key(s) you wanted were added.
[root@backup-server ~]# rsync -avz -e ssh /data/ root@remote-server:/backup/data/
Part02-自动化备份
2.1 创建备份脚本
[root@backup-server ~]# cat > /usr/local/bin/backup.sh << 'EOF' #!/bin/bash # 备份配置 SOURCE_DIR="/data" BACKUP_DIR="/backup" REMOTE_SERVER="backup-remote.fgedu.net.cn" REMOTE_DIR="/backup/data" LOG_FILE="/var/log/backup.log" DATE=$(date +%Y%m%d) DAY_OF_WEEK=$(date +%u) DAY_OF_MONTH=$(date +%d) # 日志函数 log() { echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> $LOG_FILE
}
# 全量备份函数
full_backup() {
log “Starting full backup…”
# 本地备份
rsync -avz –delete $SOURCE_DIR/ $BACKUP_DIR/full/ >> $LOG_FILE 2>&1
# 远程备份
rsync -avz -e ssh $SOURCE_DIR/ $REMOTE_SERVER:$REMOTE_DIR/full/ >> $LOG_FILE 2>&1
log “Full backup completed.”
}
# 增量备份函数
incremental_backup() {
log “Starting incremental backup…”
# 本地增量备份
rsync -avz –delete –link-dest=$BACKUP_DIR/full/ $SOURCE_DIR/ $BACKUP_DIR/incremental/$DATE/ >> $LOG_FILE 2>&1
# 远程增量备份
rsync -avz -e ssh –link-dest=$REMOTE_DIR/full/ $SOURCE_DIR/ $REMOTE_SERVER:$REMOTE_DIR/incremental/$DATE/ >> $LOG_FILE 2>&1
log “Incremental backup completed.”
}
# 清理旧备份函数
cleanup_old_backups() {
log “Cleaning up old backups…”
# 删除7天前的增量备份
find $BACKUP_DIR/incremental -type d -mtime +7 -exec rm -rf {} \; 2>/dev/null
log “Cleanup completed.”
}
# 主函数
main() {
log “Backup script started.”
# 周日执行全量备份
if [ $DAY_OF_WEEK -eq 7 ]; then
full_backup
else
incremental_backup
fi
# 每月1日清理旧备份
if [ $DAY_OF_MONTH -eq 01 ]; then
cleanup_old_backups
fi
log “Backup script finished.”
}
main
EOF
[root@backup-server ~]# chmod +x /usr/local/bin/backup.sh
# 配置定时任务
[root@backup-server ~]# crontab -l
0 2 * * * /usr/local/bin/backup.sh
# 测试备份脚本
[root@backup-server ~]# /usr/local/bin/backup.sh
# 查看备份日志
[root@backup-server ~]# cat /var/log/backup.log
2学习交流加群风哥QQ113257174026-04-04 22:10:00 – Backup script started.
2026-04-04 22:10:00 – Starting incremental backup…
2026-04-04 22:10:05 – Incremental backup completed.
2026-04-04 22:10:05 – Backup script finished.
2.2 数据库备份
[root@backup-server ~]# cat > /usr/local/bin/mysql-backup.sh << 'EOF' #!/bin/bash # MySQL配置 MYSQL_HOST="localhost" MYSQL_USER="backup" MYSQL_PASS="backup_password" BACKUP_DIR="/backup/mysql" DATE=$(date +%Y%m%d_%H%M%S) LOG_FILE="/var/log/mysql-backup.log" # 创建备份目录 mkdir -p $BACKUP_DIR # 日志函数 log() { echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> $LOG_FILE
}
# 全量备份
log “Starting MySQL full backup…”
mysqldump -h $MYSQL_HOST -u $MYSQL_USER -p$MYSQL_PASS –all-databases –single-transaction –routines –triggers –events | gzip > $BACKUP_DIR/full_$DATE.sql.gz
from PG视频:www.itpux.com
if [ $? -eq 0 ]; then
log “MySQL full backup completed: $BACKUP_DIR/full_$DATE.sql.gz”
else
log “ERROR: MySQL full backup failed!”
exit 1
fi
# 清理旧备份
find $BACKUP_DIR -name “*.sql.gz” -mtime +7 -delete
log “Old backups cleaned up.”
EOF
[root@backup-server ~]# chmod +x /usr/local/bin/mysql-backup.sh
# PostgreSQL备份脚本
[root@backup-server ~]# cat > /usr/local/bin/postgres-backup.sh << 'EOF'
#!/bin/bash
# PostgreSQL配置
PG_HOST="localhost"
PG_USER="postgres"
BACKUP_DIR="/backup/postgres"
DATE=$(date +%Y%m%d_%H%M%S)
LOG_FILE="/var/log/postgres-backup.log"
# 创建备份目录
mkdir -p $BACKUP_DIR
# 日志函数
log() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> $LOG_FILE
}
# 全量备份
log “Starting PostgreSQL full backup…”
pg_dumpall -h $PG_HOST -U $PG_USER | gzip > $BACKUP_DIR/full_$DATE.sql.gz
if [ $? -eq 0 ]; then
log “PostgreSQL full backup completed: $BACKUP_DIR/full_$DATE.sql.gz”
else
log “ERROR: PostgreSQL full backup failed!”
exit 1
fi
# 清理旧备份
find $BACKUP_DIR -name “*.sql.gz” -mtime +7 -delete
log “Old backups cleaned up.”
EOF
[root@backup-server ~]# chmod +x /usr/local/bin/postgres-backup.sh
# 配置定时任务
[root@backup-server ~]# crontab -l
0 2 * * * /usr/local/bin/backup.sh
0 3 * * * /usr/local/bin/mysql-backup.sh
0 4 * * * /usr/local/bin/postgres-backup.sh
- 实施3-2-1备份策略
- 定期验证备份数据
- 自动化备份流程
- 异地备份存储
- 定期恢复演练
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
