6.5.1 备份策略与RPO/RTO设计
本节围绕备份策略与RPO/RTO设计展开,目标是把“恢复目标”落地为可执行的备份矩阵与恢复流程。先完成业务分级与SLA确认,再按RPO/RTO设定备份频率、介质层级和恢复路径,并结合演练持续校准。
1. 业务分级与RPO/RTO目标#
示例:按业务价值制定RPO/RTO
- 核心交易:RPO≤5min,RTO≤15min
- 一般业务:RPO≤1h,RTO≤4h
- 可重建数据:RPO≤24h,RTO≤24h
示例表(备份矩阵)
- 核心交易:全量每日+binlog实时、异地同步
- 一般业务:全量每周+增量每日+binlog 1小时切换
- 可重建数据:全量每周
2. RPO设计:binlog与增量策略#
2.1 关键参数配置示例#
/etc/my.cnf 中启用binlog并设置ROW格式:
[mysqld]
server_id=1
log_bin=/data/mysql/binlog/mysql-bin
binlog_format=ROW
binlog_row_image=FULL
expire_logs_days=7
sync_binlog=1
解释
- log_bin:启用binlog并指定路径
- binlog_format=ROW:保证行级记录,便于精确回放
- sync_binlog=1:每次提交刷盘,降低RPO
2.2 binlog切换与保留#
# 手动切换binlog
mysql -uroot -p -e "FLUSH BINARY LOGS;"
# 查看binlog列表与大小
mysql -uroot -p -e "SHOW BINARY LOGS;"
预期效果:生成新的mysql-bin.00000X文件,旧日志按保留策略过期。
2.3 RPO校验(演示)#
# 查看最新binlog时间范围
mysqlbinlog /data/mysql/binlog/mysql-bin.000123 | head -n 20
用途:确认binlog是否连续,是否满足RPO窗口。
3. RTO设计:恢复路径与时间分解#
RTO由“获取备份+恢复数据+回放binlog+校验+切换”组成。关键点是减少每一步耗时:
- 全量备份周期合理,避免数据量过大
- 预置恢复环境,缩短启动时间
- 采用并行恢复和高速介质
恢复流程示例(含时间控制点)
4. 可执行示例:备份策略脚本(全量+binlog归档)#
4.1 备份目录准备#
mkdir -p /backup/full /backup/binlog
chown -R mysql:mysql /backup
4.2 全量备份(mysqldump示例)#
#!/bin/bash
# /usr/local/bin/backup_full.sh
DATE=$(date +%F)
BACKUP_DIR=/backup/full/$DATE
mkdir -p $BACKUP_DIR
mysqldump -uroot -p'YourPass' \
--single-transaction --master-data=2 \
--routines --triggers --events \
--all-databases > $BACKUP_DIR/full.sql
gzip -f $BACKUP_DIR/full.sql
echo "Full backup done: $BACKUP_DIR/full.sql.gz"
4.3 binlog归档#
#!/bin/bash
# /usr/local/bin/archive_binlog.sh
BINLOG_DIR=/data/mysql/binlog
ARCHIVE_DIR=/backup/binlog/$(date +%F)
mkdir -p $ARCHIVE_DIR
# 归档所有binlog
cp $BINLOG_DIR/mysql-bin.* $ARCHIVE_DIR/
echo "Binlog archive done: $ARCHIVE_DIR"
5. 恢复演练示例(验证RTO)#
5.1 还原全量备份#
gunzip -c /backup/full/2024-01-01/full.sql.gz | mysql -uroot -p
5.2 回放binlog到指定时间(PITR)#
mysqlbinlog /backup/binlog/2024-01-01/mysql-bin.000123 \
--stop-datetime="2024-01-01 10:30:00" | mysql -uroot -p
预期效果:恢复到指定时间点,满足RPO。
6. 排错清单(常见问题)#
- binlog未生成
- 检查log_bin是否开启
-SHOW VARIABLES LIKE 'log_bin'; - binlog回放失败
- 检查binlog文件是否完整
-mysqlbinlog --verify-binlog-checksum - 恢复耗时过长
- 全量备份文件过大:缩短全量周期
- IO瓶颈:使用SSD或并行恢复
7. 练习#
- 设计一份业务分级与RPO/RTO表,并给出对应备份矩阵。
- 实操完成一次全量备份与binlog归档。
- 在测试库执行一次PITR恢复,记录耗时并评估RTO。
- 人为删除一张表,使用备份+binlog恢复并验证一致性。