MySQL的binlog日志获取

来源:这里教程网 时间:2026-03-13 11:13:28 作者:
一、基础查看类(最常用)1. 查看单个 binlog 文件的完整内容2. 查看 binlog 文件的基础信息(起始 / 结束时间、位置)3. 按数据库过滤查看二、时间 / 位置筛选类(核心高频)1. 按时间范围筛选2. 按日志位置(Position)筛选三、输出 / 导出类(实用)1. 导出到文件(便于后续分析 / 恢复)2. 导出为可执行的 SQL(去除注释 / 无关信息)四、远程操作类(跨服务器)1. 远程查看 binlog2. 远程导出 binlog 到本地文件五、特殊格式 / 功能类1. 按字符集解析(避免乱码)2. 跳过 GTID(避免重复执行)3. 只显示 DML 语句(INSERT/UPDATE/DELETE)六、常用参数速查表总结常用

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

总结

    基础用法:mysqlbinlog [参数] binlog文件 是核心,最常用参数为 --database、--start/stop-datetime、-v;高频场景:按时间 / 数据库筛选 + 导出到文件(适配你的 purchasingent 数据库);关键注意:时间格式必须严格为 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日志获取的文章就介绍到这了,

相关推荐

热文推荐