首页/数据/数据工程与 ETL 速查/mysqlbinlog:解析与导出 binlog
CDC 与同步53 条

mysqlbinlog:解析与导出 binlog

mysqlbinlog 把 binlog 文件解析成可读文本,用于事后恢复与问题定位。ROW 格式必须加 --base64-output=DECODE-ROWS -vv 才能看到伪 SQL;支持按时间、位点、库过滤,也能用 --read-from-remote-server 从运行中的实例拉取日志。

mysqlbinlog 是什么

mysqlbinlog 是 MySQL 自带的 binlog 解析工具,把二进制日志转成可读文本,用于事后恢复与问题定位。ROW 格式下事件是编码过的行镜像,必须加 --base64-output=DECODE-ROWS 配合 -vv 才能看到可读的伪 SQL;它还能按时间、位点、库过滤,也支持用 --read-from-remote-server 直接从运行中的实例拉取日志,不必登机器翻文件。

基本信息

位置随 MySQL 发行,与 mysqld 同目录的客户端工具
格式要求ROW 格式需 --base64-output=DECODE-ROWS -vv 才可读
过滤方式按时间、位点、库名过滤
远程读取--read-from-remote-server --host --user
输出方式重定向到文件或 --result-file 指定
权限要求远程读取需要复制相关权限

解析与导出

解析与导出
# 查看某时间段事件(ROW 格式解出伪 SQL)
mysqlbinlog --base64-output=DECODE-ROWS -vv --start-datetime="2026-10-11 00:00:00" /var/log/mysql/mysql-bin.000123 | less

# 导出指定位点区间
mysqlbinlog --start-position=1944 --stop-position=3200 mysql-bin.000123 > /tmp/seg.sql
mysql -uroot -p < /tmp/seg.sql

# 只导出某个库的事件,并写入结果文件
mysqlbinlog --database=app --result-file=/tmp/app.sql mysql-bin.000123

常用参数

--database只输出指定库的事件
--start/stop-datetime按时间范围过滤
--start/stop-position按位点区间切段
--read-from-remote-server从运行中的实例拉取日志
--verbose/-vv输出伪 SQL 与列信息
--result-file把输出写入文件而不是标准输出

典型使用场景

  • 误删恢复:先定位删除前后的位点,再回放区间内的事件
  • 问题定位:查某段时间内某张表到底发生了哪些变更
  • 核对数据:把变更事件与业务日志对照,判断错误数据何时写入
  • 远程拉取:不登录数据库主机也能拉取日志内容分析
  • 链路排查:确认源端是否真的产生了预期的变更事件

常见输出读法

标识含义用途
at N事件在位点 N 处用于定位与切段回放
server id产生事件的实例标识多实例环境下区分来源
Write_rows/Update_rows/Delete_rows行级变更类型ROW 格式下的核心事件
### INSERT/UPDATE解析出的伪 SQL人工确认变更内容
GTID事件所属事务标识GTID 模式下按事务定位
回放导出的 SQL 前核对位点区间与已执行状态,避免重复执行同一批变更。
解析大文件很耗资源:优先用 --start-position/--stop-position 或时间过滤缩小范围,而不是先整文件导出来再看。

易错点

  • ROW 格式不加 --base64-output=DECODE-ROWS,只看到 base64 密文就以为文件损坏
  • 大文件整段回放前不切区间、不核对位点,重复执行造成数据错乱
  • 在从库上解析日志却按主库位点切段,区间对不上
  • 远程读取忘了给账号复制相关权限,命令直接报鉴权失败
  • 以为导出的伪 SQL 可直接无条件执行,忘了事件里可能包含临时表或系统库操作

数据来源与参考

  • MySQL 8.0 Reference Manual: mysqlbinlog - utility for processing binary log files
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌