首页/数据/数据库速查/mysqldump 记录复制位点(--source-data)
备份与恢复56 条

mysqldump 记录复制位点(--source-data)

用 --source-data=2 把 binlog 位点以注释形式写进备份头部:构建从库或做时间点恢复时,可从该位点继续重放 binlog。

数据库速查数据更新于 2026-10-13

--source-data 是什么

这个选项让 mysqldump 把备份开始时刻的 binlog 坐标写进备份文件:取值为 2 时以注释形式记录,取值为 1 时生成可直接执行的位点设置语句。它的意义是把备份与 binlog 衔接起来——用备份加载数据、再用后续 binlog 重放,就能实现时间点恢复,也是搭建从库时确定起点的标准做法。

基本信息

取值含义2 注释形式(推荐);1 可执行语句
所需权限RELOAD(旧版本用 SUPER)
前置条件主库必须开启 binlog
选项旧名MySQL 8.0.26 之前叫 --master-data
搭配选项--single-transaction 保证一致性快照

典型使用场景

  • 搭建从库:从备份头部的位点或 GTID 集合开始复制
  • 时间点恢复:备份加载后重放指定时间段的 binlog
  • 备份归档:记录位点便于日后核对备份覆盖范围
  • 迁移实例:迁移完成后以记录的位点建立复制关系
  • 备份校验:确认备份文件确实包含位点信息
  • 恢复演练:验证从备份到目标时间点的完整流程

备份并查看位点

备份并查看位点
mysqldump -uroot -p --single-transaction --source-data=2 \
  --databases appdb > appdb.sql
# 查看备份头部记录的位点信息
grep -n -E 'CHANGE REPLICATION SOURCE|SOURCE_LOG_FILE|SOURCE_LOG_POS|GTID_PURGED' appdb.sql | head
# GTID 环境下会记录 gtid_executed 集合
# 恢复后建立复制:
# CHANGE REPLICATION SOURCE TO SOURCE_HOST='10.0.0.10', SOURCE_AUTO_POSITION=1, SOURCE_USER='repl';
# START REPLICA; SHOW REPLICA STATUS\G

取值与输出含义

取值输出形式使用注意
--source-data=2行首注释,含 binlog 文件与位点默认推荐,便于人工查看
--source-data=1生成可执行语句导入即改位点,别误导入生产
不指定不记录位点只能做全量恢复,无法衔接 binlog
GTID 环境记录 gtid_executed 集合重建从库时配合 gtid_purged
--source-data=1 生成可执行语句,导入即改位点;只给建从库用,别误导入生产实例。
GTID 环境下备份头部记录的是 gtid_executed 集合,恢复后用 SET GLOBAL gtid_purged 把该集合标记为已执行,复制才能从正确位置继续。
备份文件里的位点只代表备份开始时刻,导入过程持续期间产生的新写入需要靠 binlog 补上;恢复后先确认记录到的位点或 GTID 集合,再启动复制,避免重复回放。

易错点

  • 备份时忘记记录位点,之后无法用该备份做时间点恢复
  • 把 --source-data=1 生成的语句误导入生产实例,复制位点被意外改写
  • 用 --source-data 却不开 --single-transaction,备份期间数据发生偏移不一致
  • 备份账号权限不足导致位点未写入,查看文件才发现缺失
  • GTID 环境未设置 gtid_purged,从库启动后重复回放已执行事务报错

数据来源与参考

  • MySQL 8.0 Reference Manual: mysqldump --source-data

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌