mysql如何进行增量备份_mysql增量备份实现思路

来源:这里教程网 时间:2026-02-28 20:31:38 作者:

MySQL 增量备份的核心是依赖二进制日志(binlog),它记录了所有对数据库的修改操作(INSERT、UPDATE、DELETE、DDL 等),只要开启并合理管理 binlog,就能实现基于时间点或位置的增量恢复。

确认并启用二进制日志

增量备份的前提是 MySQL 必须开启 binlog。检查当前配置:

SHOW VARIABLES LIKE 'log_bin';

若返回 ON,说明已启用;否则需在 my.cnf(或 my.ini)中添加:

[mysqld]
log-bin = mysql-bin
server-id = 1
expire_logs_days = 7  # 推荐设置,自动清理过期日志

重启 MySQL 生效。注意:server-id 必须唯一(主从复制场景下尤其重要),且不能为 0。

执行全量备份作为基准

增量备份必须基于一次可靠的全量备份。推荐使用 mysqldumpPercona XtraBackup(物理备份,支持热备):

用 mysqldump 做逻辑全备(适合中小数据量):
mysqldump --all-databases --single-transaction --flush-logs --master-data=2 > full_backup_$(date +%F).sql

关键参数说明:

--single-transaction:保证 InnoDB 一致性快照(不锁表) --flush-logs:滚动 binlog,新日志从备份后开始记录 --master-data=2:在备份文件中注释记录当前 binlog 文件名和位置(即增量起点)

备份完成后,记下生成的 binlog 文件名(如 mysql-bin.000005)和起始 position(如 198)——这是后续增量恢复的起点。

定期保存新增的 binlog 文件

全量备份之后,所有变更都写入新的 binlog。只需按需拷贝新增的 binlog 文件即可完成“增量”:

查看当前 binlog 列表:
SHOW BINARY LOGS;
将自上次全备以来产生的新 binlog 拷出(例如从 mysql-bin.000005 开始):
cp /var/lib/mysql/mysql-bin.000005 /backup/inc/
cp /var/lib/mysql/mysql-bin.000006 /backup/inc/

也可用 mysqlbinlog 提取指定时间段或位置的 SQL:

mysqlbinlog --start-datetime="2024-06-01 09:00:00" \
             --stop-datetime="2024-06-01 12:00:00" \
             /var/lib/mysql/mysql-bin.000005 > inc_20240601_am.sql

恢复时按顺序应用

恢复流程为:全量恢复 → 按序重放增量 binlog

    导入全量备份:
    mysql 
    重放增量 binlog:
    mysqlbinlog inc_20240601_am.sql | mysql
    如需精确到某条语句,可用
    --start-position
    --stop-position
    控制范围

注意:恢复前确保目标库的 binlog 已关闭(避免重复写入),或使用

SET sql_log_bin = 0;
临时禁用。

相关推荐