

一、Binlog 日志概述
Binlog(二进制日志)记录了 MySQL 数据库执行的所有更改数据的操作,包括INSERT、UPDATE、DELETE等。它对于数据恢复、主从复制以及审计等方面有着至关重要的作用。
二、查看 Binlog 日志方法
开启 Binlog 日志功能
默认情况下,MySQL 的 Binlog 日志功能可能未开启。要开启它,需要修改 MySQL 的配置文件(通常是my.cnf或my.ini)。在[mysqld]部分添加或修改以下配置:
log-bin=mysql-bin
这里mysql-bin是日志文件名前缀,重启 MySQL 服务后,Binlog 日志功能即开启。
查看当前正在使用的 Binlog 日志文件
使用以下 SQL 命令可以查看当前 MySQL 正在写入的 Binlog 日志文件名:
SHOW MASTER STATUS;
执行结果类似如下:
+------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+-------------------+ | mysql-bin.000003 | 1234 | | | | +------------------+----------+--------------+------------------+-------------------+
其中File列显示的mysql-bin.000003就是当前正在使用的 Binlog 日志文件名,Position表示当前日志写入的位置。
查看 Binlog 日志内容
mysqlbinlog [选项] binlog文件名
例如,要查看mysql-bin.000003的内容,可以执行:
mysqlbinlog mysql-bin.000003
mysqlbinlog --start-position=100 --stop-position=200 mysql-bin.000003
mysqlbinlog --start-datetime="2025-04-01 10:00:00" --stop-datetime="2025-04-01 11:00:00" mysql-bin.000003
SHOW BINLOG EVENTS [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count];
SHOW BINLOG EVENTS IN'mysql-bin.000003' FROM 50 LIMIT 0, 10;
三、Binlog 日志内容解析
Binlog 日志包含多个事件(Event),每个事件记录了一次数据库操作。常见的事件类型及解析如下:
#120505 14:31:06 server id 1 end_log_pos 123 CRC32 0xabcdef01 Start: binlog v 4, server v 5.7.20 created 120505 14:31:06 at startup
#120505 14:32:00 server id 1 end_log_pos 256 CRC32 0x12345678 Query thread_id=3 exec_time=0 error_code=0
use testdb;
SET TIMESTAMP=1336223520;
INSERT INTO users (name, age) VALUES ('John', 25);
#120505 14:33:00 server id 1 end_log_pos 300 CRC32 0x87654321 Table_map: `testdb`.`users` mapped to number 123
这里表示testdb数据库中的users表被映射为编号 123。
#120505 14:33:10 server id 1 end_log_pos 350 CRC32 0x23456789 Write_rows: table id 123 flags: STMT_END_F ### INSERT INTO `testdb`.`users` ### SET ### @1=1 /* INT meta=0 nullable=0 is_null=0 */,@2='Jane' /* VARCHAR(50) meta=50 nullable=0 is_null=0 */,@3=30 /* INT meta=0 nullable=0 is_null=0 */
表示向testdb.users表插入了一条数据,数据的具体字段值以@符号表示。
#120505 14:34:00 server id 1 end_log_pos 400 CRC32 0x34567890 Update_rows: table id 123 flags: STMT_END_F ### UPDATE `testdb`.`users` ### WHERE ### @1=1 /* INT meta=0 nullable=0 is_null=0 */,@2='Jane' /* VARCHAR(50) meta=50 nullable=0 is_null=0 */,@3=30 /* INT meta=0 nullable=0 is_null=0 */ ### SET ### @1=1 /* INT meta=0 nullable=0 is_null=0 */,@2='Jane Doe' /* VARCHAR(50) meta=50 nullable=0 is_null=0 */,@3=31 /* INT meta=0 nullable=0 is_null=0 */
#120505 14:35:00 server id 1 end_log_pos 450 CRC32 0x45678901 Delete_rows: table id 123 flags: STMT_END_F ### DELETE FROM `testdb`.`users` ### WHERE ### @1=1 /* INT meta=0 nullable=0 is_null=0 */,@2='Jane Doe' /* VARCHAR(50) meta=50 nullable=0 is_null=0 */,@3=31 /* INT meta=0 nullable=0 is_null=0 */
通过上述方法和对内容的解析,能够深入了解 MySQL 数据库中数据的变化历史,为数据库的维护和故障排查提供有力支持。
到此这篇关于MySQL Binlog 日志查看方法及查看内容解析的文章就介绍到这了,




















