一、MySQL备份策略设计原则
企业级MySQL备份需要遵循3-2-1原则:保留3份备份副本,使用2种不同存储介质,其中1份存放在异地。推荐组合方案:
- 完整备份:每周执行全库dump
- 增量备份:每日binlog归档
- 热备份:XtraBackup实现不锁表备份
二、核心备份脚本实现
以下生产环境验证的备份脚本支持压缩、分卷和自动清理:
!/bin/bash
MySQL全量备份脚本
BACKUP_DIR="/data/backups/mysql"
DATE=$(date +%Y%m%d)
MYSQL_USER="backup_user"
MYSQL_PASS="secure_password"
KEEP_DAYS=7
创建当日备份目录
mkdir -p ${BACKUP_DIR}/${DATE}
执行全库备份并压缩
mysqldump -u${MYSQL_USER} -p${MYSQL_PASS} --all-databases
--single-transaction
--master-data=2
--flush-logs | gzip > ${BACKUP_DIR}/${DATE}/full_backup.sql.gz
备份binlog索引文件
cp /var/lib/mysql/mysql-bin.index ${BACKUP_DIR}/${DATE}/
清理过期备份
find ${BACKUP_DIR} -type d -mtime +${KEEP_DAYS} -exec rm -rf {} ;
三、自动化恢复机制
灾难恢复脚本需要处理以下关键场景:
- 全量备份恢复
- 增量binlog重放
- 时间点恢复(PITR)
!/bin/bash
数据库恢复脚本
RESTORE_DATE=$1 传入备份日期参数
BACKUP_DIR="/data/backups/mysql"
MYSQL_USER="admin"
MYSQL_PASS="recovery_password"
解压备份文件
gzip -d ${BACKUP_DIR}/${RESTORE_DATE}/full_backup.sql.gz
执行全量恢复
mysql -u${MYSQL_USER} -p${MYSQL_PASS} < ${BACKUP_DIR}/${RESTORE_DATE}/full_backup.sql
应用增量binlog(示例片段)
BINLOG_FILES=$(cat ${BACKUP_DIR}/${RESTORE_DATE}/mysql-bin.index)
for binfile in ${BINLOG_FILES}; do
mysqlbinlog $binfile | mysql -u${MYSQL_USER} -p${MYSQL_PASS}
done
四、高级运维技巧
1. 备份验证机制
通过checksum验证备份完整性:
生成校验文件
sha256sum ${BACKUP_DIR}/${DATE}/full_backup.sql.gz > ${BACKUP_DIR}/${DATE}/checksum.sha256
恢复前验证
sha256sum -c ${BACKUP_DIR}/${DATE}/checksum.sha256
2. 性能优化参数
mysqldump关键参数调优:
--quick
:避免大表OOM--skip-lock-tables
:减少锁等待--max-allowed-packet=512M
:处理大BLOB字段
五、监控与告警集成
建议将备份任务纳入统一监控系统:
- 备份成功率监控
- 备份耗时趋势分析
- 存储空间预警
评论