一、备份策略设计:全量+增量+Binlog三级防护
1. 全量备份(基础锚点)
-
适用场景:中小型数据库(<1TB)、每日/每周备份。
-
工具推荐 :
mysqldump:逻辑备份,兼容性好,支持--single-transaction(InnoDB表一致性)。Percona XtraBackup:物理备份,热备份无锁表,适合大数据库(TB级)。
-
示例命令 :
bash# mysqldump全量备份(每日凌晨2点) mysqldump -u admin -p'SecurePass' --single-transaction --routines --triggers --databases my_db | gzip > /backup/full_$(date +%Y%m%d).sql.gz # XtraBackup全量备份 xtrabackup --backup --user=admin --password=SecurePass --target-dir=/backup/xtra_full
2. 增量备份(高频变更)
- 基于Binlog:记录数据变更,适合高频写入场景。需先全量备份,后仅备份Binlog。
- 配置步骤 :
-
开启Binlog:
log_bin=mysql-bin(my.cnf配置)。 -
增量备份脚本:
bashmysqlbinlog --read-from-remote-server --host=localhost -u admin -p'SecurePass' --start-position=$(mysql -u admin -p'SecurePass' -e "SHOW MASTER STATUS" | awk '/mysql-bin/{print $2}') mysql-bin.000002 > /backup/incremental_$(date +%H%M).sql
-
3. 备份保留策略
- 全量备份:保留2-7份(按周/月归档)。
- 增量备份:保留24-72小时(根据业务容忍度)。
- Binlog :配置
expire_logs_days=7自动清理。
二、自动化实现:Cron+脚本+云工具
1. Linux Cron定时任务
-
示例脚本 (
/backup/mysql_backup.sh):bash#!/bin/bash BACKUP_DIR="/backup/mysql" DATE=$(date +%Y%m%d_%H%M%S) DB_USER="admin" DB_PASS="SecurePass" DB_NAME="my_db" # 全量备份 mysqldump -u $DB_USER -p$DB_PASS --single-transaction --databases $DB_NAME | gzip > $BACKUP_DIR/full_$DATE.sql.gz # 增量备份(每小时) mysqlbinlog --read-from-remote-server --host=localhost -u $DB_USER -p$DB_PASS --start-position=$(mysql -u $DB_USER -p$DB_PASS -e "SHOW MASTER STATUS" | awk '/mysql-bin/{print $2}') mysql-bin.000002 > $BACKUP_DIR/incremental_$DATE.sql -
Cron配置 (每日凌晨2点全量+每小时增量):
bashcrontab -e 0 2 * * * /bin/bash /backup/mysql_backup.sh # 全量 0 * * * * /bin/bash /backup/incremental_backup.sh # 增量
2. 云数据库自动化工具
- AWS RDS :通过 AWS Backup 配置每日全量备份+按需增量,支持跨区域复制。
- 阿里云RDS:自动备份策略(可设置保留天数、备份周期),支持按时间点恢复。
- 腾讯云CDB:自动备份+手动快照,支持秒级恢复。
三、故障恢复:全量+增量+Binlog时间点恢复
1. 全量备份恢复
-
逻辑备份恢复 :
bashgunzip -c /backup/full_20251204.sql.gz | mysql -u admin -p'SecurePass' my_db -
XtraBackup恢复 :
bashxtrabackup --copy-back --target-dir=/backup/xtra_full chown -R mysql:mysql /var/lib/mysql systemctl restart mysqld
2. 增量+Binlog时间点恢复
- 步骤 :
-
恢复最近全量备份:
mysql < full_backup.sql -
应用增量备份:
mysql < incremental_backup.sql -
应用Binlog到故障前时间点:
bashmysqlbinlog --stop-datetime="2025-12-04 14:30:00" mysql-bin.000003 | mysql -u admin -p
-
3. 主从复制环境恢复
- 主库故障 :
- 提升从库为主库,从全量备份+Binlog恢复数据。
- 从库故障 :
- 重建从库:重新导入主库全量备份,配置复制同步。