共98行

如何查看mysql binlog

2026-04-03 11:09:54

查看 MySQL Binlog 主要分为两步:先定位文件再解析内容。根据你的需求(是看文件名还是看具体SQL),操作路径有所不同。

一、先找到 Binlog 文件在哪

1. 查询当前正在使用的文件

登录 MySQL 后,执行以下命令查看当前正在写入的 binlog 文件及位置:

SHOW MASTER STATUS;

输出示例:

+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 |      107 |              |                  |
+------------------+----------+--------------+------------------+

这里 mysql-bin.000001 就是当前的 binlog 文件名。

2. 查看所有可用的 Binlog 文件列表

SHOW BINARY LOGS;

这会列出服务器上所有的 binlog 文件,帮助你确定需要解析的历史文件。

3. 确认文件物理路径(关键)

binlog 文件通常位于 MySQL 的数据目录(datadir)下。通过以下命令找到数据目录路径:

SHOW VARIABLES LIKE 'datadir';

然后结合第一步得到的文件名(如 mysql-bin.000001),即可在服务器文件系统中定位到完整路径(如 /var/lib/mysql/mysql-bin.000001)。


二、解析 Binlog 内容(看具体操作)

注意:Binlog 是二进制格式,不能直接用 catvim 查看,必须使用官方工具 mysqlbinlog 进行解析。

1. 使用 mysqlbinlog 工具(最常用)

mysqlbinlog 是 MySQL 自带的命令行工具,通常在 MySQL 的 bin 目录下。

基础用法(在服务器上执行):

# 解析指定的 binlog 文件
mysqlbinlog /var/lib/mysql/mysql-bin.000001

# 解析并解码为可读的 SQL 语句(推荐)
mysqlbinlog --base64-output=DECODE-ROWS -v /var/lib/mysql/mysql-bin.000001

按时间范围查询:

# 只查看 2026-04-03 当天的日志
mysqlbinlog --start-datetime="2026-04-03 00:00:00" --stop-datetime="2026-04-03 23:59:59" mysql-bin.000001

按位置范围查询:

mysqlbinlog --start-position=4 --stop-position=123 mysql-bin.000001

2. 在 MySQL 客户端内查看(不常用)

你也可以在 MySQL 会话中使用 SHOW BINLOG EVENTS,但它通常只用于查看事件概览,不适合查看详细的SQL内容。

SHOW BINLOG EVENTS IN 'mysql-bin.000001' FROM 4 LIMIT 10;

三、常见问题与排查

1. 为什么 mysqlbinlog 解析出来是乱码或 Base64?

2. 找不到 mysqlbinlog 命令?

3. 如何查看是谁执行了操作?

默认的 binlog 只记录 SQL 语句,不记录执行用户(除非你开启了 binlog_rows_query_log_events 或使用审计插件)。如果需要审计用户,通常需要借助中间件或开启全量日志审计功能。


四、快速命令速查表

场景 命令
看当前文件 SHOW MASTER STATUS;
看文件列表 SHOW BINARY LOGS;
找文件路径 SHOW VARIABLES LIKE 'datadir';
解析为SQL mysqlbinlog --base64-output=DECODE-ROWS -v mysql-bin.000001
按时间过滤 mysqlbinlog --start-datetime="2026-04-03 00:00:00" mysql-bin.000001