支持,但主从复制本身不是备份手段,而是增量数据同步机制;真正的增量备份依赖 binlog + 定期归档,主从只是辅助验证和快速切换的冗余通道。
为什么主从 ≠ 增量备份
主从复制实时拉取并重放
binlog,看起来像“持续增量”,但它不具备备份的三个基本属性:可离线、可校验、可隔离恢复。一旦主库误删库、从库也会跟着执行(除非启用了
read_only=1且未被绕过),更无法回退到某时间点——它只是另一份运行中的副本。 主从延迟或中断时,从库数据已落后,不能当作“最新备份”直接使用 从库没做
FLUSH LOGS或
PURGE BINLOGS管理,
binlog文件可能被自动清理,导致无法还原中间状态 没有备份元数据(如
CHANGE MASTER TO记录的位置点),你甚至不知道该从哪个
mysql-bin.0000xx的哪个
POS开始恢复
真正能用于增量备份的组合方案
必须把主从架构里的
binlog抽出来单独归档,配合定期全量备份,才构成可靠增量策略: 全量备份用
mysqldump --single-transaction --flush-logs --master-data=2(InnoDB)或
xtrabackup --backup,生成带
MASTER_LOG_FILE和
MASTER_LOG_POS的快照 每天定时拷贝新增的
binlog文件(如
cp /var/lib/mysql/mysql-bin.* /backup/binlogs/),并用
mysqlbinlog --base64-output=DECODE-ROWS -v抽样检查内容是否可读 严禁在从库上直接
PURGE MASTER LOGS—— 从库的
binlog是它自己的,不是主库的;归档应只在主库操作,且需确认所有从库已同步完毕
容易被忽略的关键配置坑
很多线上故障源于 binlog 配置不闭环,不是没开,而是开了却失效或不可用:
server-id必须全局唯一,主从不能重复,否则复制中断且无明确报错
log-bin路径目录必须由
mysql用户可写,且磁盘不能和数据目录共用同一物理卷(避免 I/O 争抢或单点故障)
expire_logs_days=7很好,但若全量备份周期是 14 天,就会导致旧 binlog 被删、增量链断裂 —— 这个值必须 ≥ 最长备份保留周期 使用
mysqldump --master-data=2备份后,务必检查输出 SQL 文件里是否有
CHANGE MASTER TO行;若为空,说明
log-bin没生效或 mysqldump 运行时没权限读取
真正落地时,最常出问题的不是技术不会用,而是 binlog 归档脚本没加锁、没校验 md5、没监控文件是否为空,结果某天发现最近三天的
mysql-bin.0000xx全是 0 字节 —— 此时主库又刚被误 truncate,那就只能翻备份日志祈祷了。
