1. 首页 > Linux教程 > 正文

Linux教程FG357-存储备份策略

内容简介:本文风哥教程参考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备份

# 安装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 数据库备份

# MySQL备份脚本
[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

联系我们

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

微信号:itpux-com

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