欢迎光临
专业Linux运维二十年

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

    一、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 日志查看方法及查看内容解析的文章就介绍到这了,

    脚本之家
    赞(0) 打赏
    未经允许不得转载:Linux老运维 » MySQL Binlog 日志查看方法及查看内容解析

    觉得文章有用就打赏一下文章作者

    非常感谢你的打赏,我们将继续提供更多优质内容,让我们一起创建更加美好的网络世界!

    支付宝扫一扫

    微信扫一扫