MySQL Binlog 日志查看方法及查看内容解析!
MySQL Binlog 日志查看方法及查看内容解析!
一、Binlog 日志概述
Binlog(二进制日志)记录了 MySQL 数据库执行的所有更改数据的操作,包括INSERT、UPDATE、DELETE等。它对于数据恢复、主从复制以及审计等方面有着至关重要的作用。
二、查看 Binlog 日志方法
开启 Binlog 日志功能
默认情况下,MySQL 的 Binlog 日志功能可能未开启。要开启它,需要修改 MySQL 的配置文件(通常是my.cnf或my.ini)。在[mysqld]部分添加或修改以下配置:
1
|
log-bin=mysql-bin |
这里mysql-bin是日志文件名前缀,重启 MySQL 服务后,Binlog 日志功能即开启。
查看当前正在使用的 Binlog 日志文件
使用以下 SQL 命令可以查看当前 MySQL 正在写入的 Binlog 日志文件名:
1
|
SHOW MASTER STATUS; |
执行结果类似如下:
1
2
3
4
5
|
+ ------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | + ------------------+----------+--------------+------------------+-------------------+ | mysql-bin.000003 | 1234 | | | | + ------------------+----------+--------------+------------------+-------------------+ |
其中File列显示的mysql-bin.000003就是当前正在使用的 Binlog 日志文件名,Position表示当前日志写入的位置。
查看 Binlog 日志内容
- 使用 mysqlbinlog 工具:
-
- 该工具随 MySQL 安装包一同提供。在命令行中,使用以下语法查看 Binlog 日志内容:
1
|
mysqlbinlog [选项] binlog文件名 |
例如,要查看mysql-bin.000003的内容,可以执行:
1
|
mysqlbinlog mysql-bin.000003 |
- 常用选项:
-
- --start-position和--stop-position:用于指定查看日志的位置范围。例如,只查看从位置 100 到 200 的内容:
1
|
mysqlbinlog --start-position=100 --stop-position=200 mysql-bin.000003 |
- --start-datetime和--stop-datetime:根据时间范围查看日志。如查看 2025 - 04 - 01 10:00:00 到 2025 - 04 - 01 11:00:00 之间的日志:
1
|
mysqlbinlog --start-datetime= "2025-04-01 10:00:00" --stop-datetime= "2025-04-01 11:00:00" mysql-bin.000003 |
- 在 MySQL 客户端中通过SHOW BINLOG EVENTS命令:
-
- 语法如下:
1
|
SHOW BINLOG EVENTS [IN 'log_name' ] [FROM pos] [LIMIT [offset,] row_count]; |
- 示例:查看mysql-bin.000003从位置 50 开始的 10 条日志事件:
1
|
SHOW BINLOG EVENTS IN 'mysql-bin.000003' FROM 50 LIMIT 0, 10; |
三、Binlog 日志内容解析
Binlog 日志包含多个事件(Event),每个事件记录了一次数据库操作。常见的事件类型及解析如下:
- Format_desc 事件:
-
- 通常是 Binlog 日志的第一个事件,用于描述该 Binlog 日志的格式信息,包括日志版本、创建时间等。例如:
1
|
#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:31:06是事件发生时间,server id 1是服务器 ID,end_log_pos 123表示该事件结束的位置,CRC32 0xabcdef01是 CRC32 校验和。
- Query 事件:
-
- 记录了一条 SQL 查询语句,通常是INSERT、UPDATE、DELETE等更改数据的操作。例如:
1
2
3
4
|
#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:32:00是事件发生时间,server id 1是服务器 ID,end_log_pos 256是事件结束位置。thread_id=3表示执行该查询的线程 ID,exec_time=0是查询执行时间(秒),error_code=0表示执行无错误。下面的use testdb;指定了操作的数据库,SET TIMESTAMP=1336223520;设置了时间戳,最后是具体的INSERT语句。
- Row_event 系列事件(如 Table_map 事件、Write_rows 事件、Update_rows 事件、Delete_rows 事件):
-
- 在基于行模式(row - based)的 Binlog 记录中常见。
-
- Table_map 事件:用于映射表的结构信息,例如:
1
|
#120505 14:33:00 server id 1 end_log_pos 300 CRC32 0x87654321 Table_map: `testdb`.`users` mapped to number 123 |
这里表示testdb数据库中的users表被映射为编号 123。
- Write_rows 事件:记录了插入数据的操作。例如:
1
2
3
4
|
#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表插入了一条数据,数据的具体字段值以@符号表示。
- Update_rows 事件:记录更新数据的操作,会包含更新前和更新后的行数据。例如:
1
2
3
4
5
6
|
#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 */ |
- Delete_rows 事件:记录删除数据的操作,包含被删除行的信息。例如:
1
2
3
4
|
#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 日志查看方法及查看内容解析的文章就介绍到这了。
学习资料见知识星球。
以上就是今天要分享的技巧,你学会了吗?若有什么问题,欢迎在下方留言。
快来试试吧,小琥 my21ke007。获取 1000个免费 Excel模板福利!
更多技巧, www.excelbook.cn
欢迎 加入 零售创新 知识星球,知识星球主要以数据分析、报告分享、数据工具讨论为主;
1、价值上万元的专业的PPT报告模板。
2、专业案例分析和解读笔记。
3、实用的Excel、Word、PPT技巧。
4、VIP讨论群,共享资源。
5、优惠的会员商品。
6、一次付费只需129元,即可下载本站文章涉及的文件和软件。