MySQL Binlog 日志查看方法及查看内容解析

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS AI 助手,专业版
简介: 本文介绍了 MySQL 的 Binlog(二进制日志)功能及其使用方法。Binlog 记录了数据库的所有数据变更操作,如 INSERT、UPDATE 和 DELETE,对数据恢复、主从复制和审计至关重要。文章详细说明了如何开启 Binlog 功能、查看当前日志文件及内容,并解析了常见的事件类型,包括 Format_desc、Query、Table_map、Write_rows、Update_rows 和 Delete_rows 等,帮助用户掌握数据库变化历史,提升维护和排障能力。

1505d7f4-fb62-43a8-b24c-c9835b8b5c66_1744010194513889361_origin~tplv-a9rns2rl98-image-qvalue.jpeg


一、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 日志内容

  1. 使用 mysqlbinlog 工具
  • 该工具随 MySQL 安装包一同提供。在命令行中,使用以下语法查看 Binlog 日志内容:
mysqlbinlog [选项] binlog文件名

例如,要查看mysql-bin.000003的内容,可以执行:

mysqlbinlog mysql-bin.000003
  • 常用选项:
  • --start-position和--stop-position:用于指定查看日志的位置范围。例如,只查看从位置 100 到 200 的内容:
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 之间的日志:
mysqlbinlog --start-datetime="2025-04-01 10:00:00" --stop-datetime="2025-04-01 11:00:00" mysql-bin.000003
  1. 在 MySQL 客户端中通过SHOW BINLOG EVENTS命令
  • 语法如下:
SHOW BINLOG EVENTS [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count];
  • 示例:查看mysql-bin.000003从位置 50 开始的 10 条日志事件:
SHOW BINLOG EVENTS IN'mysql-bin.000003' FROM 50 LIMIT 0, 10;

三、Binlog 日志内容解析

Binlog 日志包含多个事件(Event),每个事件记录了一次数据库操作。常见的事件类型及解析如下:

  1. Format_desc 事件
  • 通常是 Binlog 日志的第一个事件,用于描述该 Binlog 日志的格式信息,包括日志版本、创建时间等。例如:
#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 校验和。
  1. Query 事件
  • 记录了一条 SQL 查询语句,通常是INSERT、UPDATE、DELETE等更改数据的操作。例如:
#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语句。
  1. Row_event 系列事件(如 Table_map 事件、Write_rows 事件、Update_rows 事件、Delete_rows 事件)
  • 在基于行模式(row - based)的 Binlog 记录中常见。
  • Table_map 事件:用于映射表的结构信息,例如:
#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 事件:记录了插入数据的操作。例如:
#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 事件:记录更新数据的操作,会包含更新前和更新后的行数据。例如:
#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 事件:记录删除数据的操作,包含被删除行的信息。例如:
#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 数据库中数据的变化历史,为数据库的维护和故障排查提供有力支持。

相关文章
|
9月前
|
人工智能 运维 关系型数据库
数据库运维:mysql 数据库迁移方法-mysqldump
本文介绍了MySQL数据库迁移的方法与技巧,重点探讨了数据量大小对迁移方式的影响。对于10GB以下的小型数据库,推荐使用mysqldump进行逻辑导出和source导入;10GB以上可考虑mydumper与myloader工具;100GB以上则建议物理迁移。文中还提供了统计数据库及表空间大小的SQL语句,并讲解了如何使用mysqldump导出存储过程、函数和数据结构。通过结合实际应用场景选择合适的工具与方法,可实现高效的数据迁移。
1489 1
|
6月前
|
存储 缓存 监控
用 C++ 红黑树给公司电脑监控软件的日志快速排序的方法
本文介绍基于C++红黑树算法实现公司监控电脑软件的日志高效管理,利用其自平衡特性提升日志排序、检索与动态更新效率,并结合实际场景提出优化方向,增强系统性能与稳定性。
194 4
|
6月前
|
SQL 运维 关系型数据库
深入探讨MySQL的二进制日志(binlog)选项
总结而言,对MySQL binlogs深度理解并妥善配置对数据库运维管理至关重要;它不仅关系到系统性能优化也是实现高可靠性架构设计必须考虑因素之一。通过精心规划与周密部署可以使得该机能充分发挥作用而避免潜在风险带来影响。
209 6
|
7月前
|
存储 关系型数据库 MySQL
MySQL数据库中进行日期比较的多种方法介绍。
以上方法提供了灵活多样地处理和对比MySQL数据库中存储地不同格式地日子信息方式。根据实际需求选择适当方式能够有效执行所需操作并保证性能优化。
699 10
|
7月前
|
存储 SQL 关系型数据库
MySQL中binlog、redolog与undolog的不同之处解析
每个都扮演回答回溯与错误修正机构角色: BinLog像历史记载员详细记载每件大大小小事件; RedoLog则像紧急救援队伍遇见突發情況追踪最后活动轨迹尽力补救; UndoLog就类似时间机器可倒带历史让一切归位原始样貌同时兼具平行宇宙观察能让多人同时看见各自期望看见历程而互不干扰.
417 9
|
8月前
|
SQL Oracle 关系型数据库
比较MySQL和Oracle数据库系统,特别是在进行分页查询的方法上的不同
两者的性能差异将取决于数据量大小、索引优化、查询设计以及具体版本的数据库服务器。考虑硬件资源、数据库设计和具体需求对于实现优化的分页查询至关重要。开发者和数据库管理员需要根据自身使用的具体数据库系统版本和环境,选择最合适的分页机制,并进行必要的性能调优来满足应用需求。
403 11
|
8月前
|
存储 SQL 关系型数据库
MySQL 核心知识与索引优化全解析
本文系统梳理了 MySQL 的核心知识与索引优化策略。在基础概念部分,阐述了 char 与 varchar 在存储方式和性能上的差异,以及事务的 ACID 特性、并发事务问题及对应的隔离级别(MySQL 默认 REPEATABLE READ)。 索引基础部分,详解了 InnoDB 默认的 B+tree 索引结构(多路平衡树、叶子节点存数据、双向链表支持区间查询),区分了聚簇索引(数据与索引共存,唯一)和二级索引(数据与索引分离,多个),解释了回表查询的概念及优化方法,并分析了 B+tree 作为索引结构的优势(树高低、效率稳、支持区间查询)。 索引优化部分,列出了索引创建的六大原则
200 2
|
8月前
|
Prometheus 监控 Cloud Native
使用docker-compose管理多服务项目:日志监控方法指南
通过上述步骤,可以建立有效的日志监控系统,这不仅有助于问题的迅速定位和解决,而且对于分析系统性能、用户行为模式等都是一个宝贵的资源。只要正确配置和维护,Docker Compose管理的多服务项目可以高效地进行日志监控与分析。
339 0
|
8月前
|
存储 SQL 关系型数据库
MySQL 核心知识与性能优化全解析
我整理的这份内容涵盖了 MySQL 诸多核心知识。包括查询语句的书写与执行顺序,多表查询的连接方式及内、外连接的区别。还讲了 CHAR 和 VARCHAR 的差异,索引的类型、底层结构、聚簇与非聚簇之分,以及回表查询、覆盖索引、左前缀原则和索引失效情形,还有建索引的取舍。对比了 MyISAM 和 InnoDB 存储引擎的不同,提及性能优化的多方面方法,以及超大分页处理、慢查询定位与分析等,最后提到了锁和分库分表可参考相关资料。
189 0
|
9月前
|
关系型数据库 MySQL
MySQL字符串拼接方法全解析
本文介绍了四种常用的字符串处理函数及其用法。方法一:CONCAT,用于基础拼接,参数含NULL时返回NULL;方法二:CONCAT_WS,带分隔符拼接,自动忽略NULL值;方法三:GROUP_CONCAT,适用于分组拼接,支持去重、排序和自定义分隔符;方法四:算术运算符拼接,仅适用于数值类型,字符串会尝试转为数值处理。通过示例展示了各函数的特点与应用场景。

推荐镜像

更多