Mysql

关注公众号 jb51net

关闭
首页 > 数据库 > Mysql > MySQL binlog日志获取

MySQL的binlog日志获取

作者:lxq124lxq

mysqlbinlog是MySQL的核心工具,用于解析和提取 binlog 日志,本文主要介绍了MySQL的binlog日志获取,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

mysqlbinlog 是 MySQL 解析和提取 binlog 日志的核心工具,下面整理了日常开发 / 运维中最常用的命令,按使用场景分类,适配你的实际环境(基于 /var/lib/mysql 下的 binlog 文件)。

一、基础查看类(最常用)

1. 查看单个 binlog 文件的完整内容

# 查看本地 binlog 文件(基础格式)
mysqlbinlog /var/lib/mysql/mysql-bin.000067

# 带行级详情(ROW 格式下看具体数据变更,-vv 更详细)
mysqlbinlog -v /var/lib/mysql/mysql-bin.000067
mysqlbinlog -vv /var/lib/mysql/mysql-bin.000067

2. 查看 binlog 文件的基础信息(起始 / 结束时间、位置)

# 只看前 50 行(快速获取文件头信息)
mysqlbinlog /var/lib/mysql/mysql-bin.000067 | head -50

# 查看文件的起始/结束位置和时间(过滤关键字)
mysqlbinlog /var/lib/mysql/mysql-bin.000067 | grep -E "Start|End|TIMESTAMP"

3. 按数据库过滤查看

只提取 purchasingent 数据库的 binlog(你的核心场景):

mysqlbinlog --database=purchasingent /var/lib/mysql/mysql-bin.000067

二、时间 / 位置筛选类(核心高频)

1. 按时间范围筛选

# 基础用法(指定起始+结束时间)
mysqlbinlog --start-datetime="2026-03-06 00:00:00" --stop-datetime="2026-03-06 23:59:59" /var/lib/mysql/mysql-bin.000067

# 只取起始时间之后的内容
mysqlbinlog --start-datetime="2026-03-06 10:00:00" /var/lib/mysql/mysql-bin.000067

# 只取结束时间之前的内容
mysqlbinlog --stop-datetime="2026-03-06 18:00:00" /var/lib/mysql/mysql-bin.000067

# 组合数据库过滤+时间筛选(你的常用场景)
mysqlbinlog --database=purchasingent --start-datetime="2026-03-06 00:00:00" --stop-datetime="2026-03-06 23:59:59" /var/lib/mysql/mysql-bin.000067

2. 按日志位置(Position)筛选

binlog 中每个事件都有唯一位置值,适合精准筛选:

# 指定起始位置 + 结束位置
mysqlbinlog --start-position=107 --stop-position=1000 /var/lib/mysql/mysql-bin.000067

# 只取起始位置之后的内容
mysqlbinlog --start-position=107 /var/lib/mysql/mysql-bin.000067

三、输出 / 导出类(实用)

1. 导出到文件(便于后续分析 / 恢复)

# 导出时间范围的 binlog 到 sql 文件
mysqlbinlog --start-datetime="2026-03-06 00:00:00" --stop-datetime="2026-03-06 23:59:59" /var/lib/mysql/mysql-bin.000067 > /tmp/purchasingent_binlog_20260306.sql

# 导出多个 binlog 文件到一个文件
mysqlbinlog /var/lib/mysql/mysql-bin.000066 /var/lib/mysql/mysql-bin.000067 > /tmp/all_binlog.sql

2. 导出为可执行的 SQL(去除注释 / 无关信息)

mysqlbinlog --skip-gtids --base64-output=DECODE-ROWS -v /var/lib/mysql/mysql-bin.000067 > /tmp/executable_binlog.sql

# 导出时间范围的 binlog 可执行的sql到 sql 文件
mysqlbinlog --database=purchasingent --start-datetime="2026-03-06 10:20:00" --stop-datetime="2026-03-06 10:29:59" --skip-gtids --base64-output=DECODE-ROWS -v /var/lib/mysql/mysql-bin.000067 > /var/lib/mysql/tmp/
/purchasingent_binlog_2026030601.sql

四、远程操作类(跨服务器)

1. 远程查看 binlog

mysqlbinlog -h 192.168.1.100 -u root -p123456 -P 3306 --database=purchasingent mysql-bin.000067

2. 远程导出 binlog 到本地文件

mysqlbinlog -h 192.168.1.100 -u root -p123456 -P 3306 --start-datetime="2026-03-06 00:00:00" --stop-datetime="2026-03-06 23:59:59" mysql-bin.000067 > /tmp/remote_binlog.sql

五、特殊格式 / 功能类

1. 按字符集解析(避免乱码)

mysqlbinlog --default-character-set=utf8mb4 /var/lib/mysql/mysql-bin.000067

2. 跳过 GTID(避免重复执行)

适用于有 GTID 开启的环境,导出的 SQL 可直接执行:

mysqlbinlog --skip-gtids /var/lib/mysql/mysql-bin.000067 > /tmp/no_gtid_binlog.sql

3. 只显示 DML 语句(INSERT/UPDATE/DELETE)

mysqlbinlog /var/lib/mysql/mysql-bin.000067 | grep -E "INSERT|UPDATE|DELETE"

六、常用参数速查表

参数作用
-v/-vv显示行级详情(ROW 格式下必备)
--database=db_name只提取指定数据库的 binlog
--start-datetime起始时间(格式:YYYY-MM-DD HH:MM:SS)
--stop-datetime结束时间(同上)
--start-position起始日志位置
--stop-position结束日志位置
--skip-gtids跳过 GTID 信息(便于执行导出的 SQL)
-h/-u/-p/-P远程连接参数(主机 / 用户名 / 密码 / 端口)
--default-character-set指定字符集(避免乱码)
--base64-output=DECODE-ROWS解码 ROW 格式的 binlog 为可读 SQL

总结

  1. 基础用法:mysqlbinlog [参数] binlog文件 是核心,最常用参数为 --database、--start/stop-datetime、-v;
  2. 高频场景:按时间 / 数据库筛选 + 导出到文件(适配你的 purchasingent 数据库);
  3. 关键注意:时间格式必须严格为 YYYY-MM-DD HH:MM:SS,ROW 格式需加 -vv 才能看到具体数据变更。

常用

示例1

# 获取purchasingent库中,时间范围2026-03-06 10:20:00到2026-03-06 10:21:59 的可执行的sql,包含Delete内容的后50行
# grep -i	忽略大小写(binlog 中 DELETE 可能是大写,加 -i 避免漏查)
# grep -C 50	显示匹配行的前 50 行 + 后 50 行(也可以用 -A 50 -B 50,效果相同)
# grep -A 50	仅显示匹配行的后 50 行(After)
# grep -B 50	仅显示匹配行的前 50 行(Before)
mysqlbinlog --database=purchasingent --start-datetime="2026-03-06 10:20:00" --stop-datetime="2026-03-06 10:21:59" --skip-gtids --base64-output=DECODE-ROWS -v /var/lib/mysql/mysql-bin.000067  |grep -i -A 50 "delete"

# 获取purchasingent库中,时间范围2026-03-06 10:20:00到2026-03-06 10:29:59 的可执行的sql导出到purchasingent_binlog_2026030601.sql中
mysqlbinlog --database=purchasingent --start-datetime="2026-03-06 10:20:00" --stop-datetime="2026-03-06 10:29:59" --skip-gtids --base64-output=DECODE-ROWS -v /var/lib/mysql/mysql-bin.000067 > /var/lib/mysql/tmp/
/purchasingent_binlog_2026030601.sql

示例2

获取purchasingent库中d_cp_purchasingrequisition开头的表,时间范围2026-03-06 10:20:00到2026-03-06 10:21:59 的可执行的sql

 #简洁日志
 mysqlbinlog --database=purchasingent --start-datetime="2026-03-06 10:20:00" --stop-datetime="2026-03-06 10:21:59" --skip-gtids --base64-output=DECODE-ROWS -v /var/lib/mysql/mysql-bin.000067  |grep  -i -E  "Table_map: \`purchasingent\`.\`d_cp_purchasingrequisition" -A 3
 # 范围内的所有日志
 mysqlbinlog --database=purchasingent --start-datetime="2026-03-06 10:20:00" --stop-datetime="2026-03-06 10:21:59" --skip-gtids --base64-output=DECODE-ROWS -v /var/lib/mysql/mysql-bin.000067 

简洁日志结果

root@680a7c552dab:/tmp#  mysqlbinlog --database=purchasingent --start-datetime="2026-03-06 10:20:00" --stop-datetime="2026-03-06 10:21:59" --skip-gtids --base64-output=DECODE-ROWS -v /var/lib/mysql/mysql-bin.000067  |grep  -i -E  "Table_map: \`purchasingent\`.\`d_cp_purchasingrequisition" -A 3
#260306 10:21:20 server id 3306  end_log_pos 784198349 CRC32 0xb20d9141         Table_map: `purchasingent`.`d_cp_purchasingrequisition` mapped to number 833
# at 784198349
#260306 10:21:20 server id 3306  end_log_pos 784198796 CRC32 0x53891233         Write_rows: table id 833 flags: STMT_END_F
### INSERT INTO `purchasingent`.`d_cp_purchasingrequisition`
--
#260306 10:21:20 server id 3306  end_log_pos 784201543 CRC32 0x8f63ffb9         Table_map: `purchasingent`.`d_cp_purchasingrequisitiondtl` mapped to number 1204
# at 784201543
#260306 10:21:20 server id 3306  end_log_pos 784202455 CRC32 0x7b7b2c71         Write_rows: table id 1204 flags: STMT_END_F
### INSERT INTO `purchasingent`.`d_cp_purchasingrequisitiondtl`
--
#260306 10:21:20 server id 3306  end_log_pos 784204702 CRC32 0x48ec57fe         Table_map: `purchasingent`.`d_cp_purchasingrequisitiondtl` mapped to number 1204
# at 784204702
#260306 10:21:20 server id 3306  end_log_pos 784205112 CRC32 0x626f1884         Write_rows: table id 1204 flags: STMT_END_F
### INSERT INTO `purchasingent`.`d_cp_purchasingrequisitiondtl`
--
#260306 10:21:20 server id 3306  end_log_pos 784207099 CRC32 0xcde54035         Table_map: `purchasingent`.`d_cp_purchasingrequisition` mapped to number 833
# at 784207099
#260306 10:21:20 server id 3306  end_log_pos 784207959 CRC32 0x181420b5         Update_rows: table id 833 flags: STMT_END_F
### UPDATE `purchasingent`.`d_cp_purchasingrequisition`
--
#260306 10:21:24 server id 3306  end_log_pos 784287873 CRC32 0x4601c581         Table_map: `purchasingent`.`d_cp_purchasingrequisition` mapped to number 833
# at 784287873
#260306 10:21:24 server id 3306  end_log_pos 784288733 CRC32 0x961207ea         Update_rows: table id 833 flags: STMT_END_F
### UPDATE `purchasingent`.`d_cp_purchasingrequisition`
--
#260306 10:21:26 server id 3306  end_log_pos 784312864 CRC32 0x0a5223c0         Table_map: `purchasingent`.`d_cp_purchasingrequisitiondtl` mapped to number 1204
# at 784312864
#260306 10:21:26 server id 3306  end_log_pos 784313776 CRC32 0xb78b9ba1         Delete_rows: table id 1204 flags: STMT_END_F
### DELETE FROM `purchasingent`.`d_cp_purchasingrequisitiondtl`
--
#260306 10:21:26 server id 3306  end_log_pos 784314192 CRC32 0xcf4c1bd8         Table_map: `purchasingent`.`d_cp_purchasingrequisitiondtl` mapped to number 1204
# at 784314192
#260306 10:21:26 server id 3306  end_log_pos 784314602 CRC32 0x7ec98c91         Delete_rows: table id 1204 flags: STMT_END_F
### DELETE FROM `purchasingent`.`d_cp_purchasingrequisitiondtl`
--
#260306 10:21:26 server id 3306  end_log_pos 784314985 CRC32 0x79267223         Table_map: `purchasingent`.`d_cp_purchasingrequisition` mapped to number 833
# at 784314985
#260306 10:21:26 server id 3306  end_log_pos 784315432 CRC32 0x1e3f52d9         Delete_rows: table id 833 flags: STMT_END_F
### DELETE FROM `purchasingent`.`d_cp_purchasingrequisition`

到此这篇关于MySQL的binlog日志获取的文章就介绍到这了,更多相关MySQL binlog日志获取内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文