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日志获取的文章就介绍到这了,更多相关mysql binlog日志获取内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论