• MySQL的binlog日志的简介与查看


    您好,我是码农飞哥(wei158556),感谢您阅读本文,欢迎一键三连哦
    💪🏻 1. Python基础专栏,基础知识一网打尽,9.9元买不了吃亏,买不了上当。 Python从入门到精通
    😁 2. 毕业设计专栏,毕业季咱们不慌忙,几百款毕业设计等你选。
    ❤️ 3. Python爬虫专栏,系统性的学习爬虫的知识点。9.9元买不了吃亏,买不了上当 。python爬虫入门进阶
    ❤️ 4. Ceph实战,从原理到实战应有尽有。 Ceph实战
    ❤️ 5. Java高并发编程入门,打卡学习Java高并发。 Java高并发编程入门

    1、binlog日志是什么

    binlog主要用于记录MySQL中的数据库操作,它包括DDL和DML语句(除了查询语句)。它以事件的形式记录,它是一个二进制文件。MySQL的二进制日志是事务安全型的。一般来说开启二进制日志大概会有1%的性能损耗(参见MySQL官方中文手册 5.1.24版)。二进制有两个最重要的使用场景:

    1. MySQL Replication在Master端开启binlog,Master把它的二进制日志传递给slaves来达到master-slave数据一致性的目的。
    2. 数据恢复,通过使用 mysqlbinlog 工具来恢复数据。

    binlog日志主要包括两类文件:二进制索引文件(文件名后缀为.index)用于记录所有二进制文件,二进制日志文件(文件名后缀为.0000*),记录数据库中所有的DDL和DML语句。

    2、binlog日志如何查看

    binlog有三种模式

    format定义优点缺点
    statement记录的是修改SQL语句日志文件小,节约IO,提高性能准确性差,对一些系统函数不能准确复制或不能复制,如now0.uuid0等
    row记录的是每行实际数据变化准确性强,能准确复制数据的变更日志文件大,较大的网络10和磁盘lO
    mixedstatement和row模式的混合准确性强,文件大小适中有可能发生主从不一致问题

    业内目前推荐使用的是row模式,准确性高,虽然说文件大,但是现在有SSD和万兆光纤网络,这些磁盘IO和网络IO都是可以接受的。mysql默认的也是row模式。

    binlog日志文件是二进制文件,不能直接查看。可以通过下面的命令进行查看

    mysqlbinlog mysql-bin.00001
    
    • 1

    如果是row模式的话

    mysqlbinlog -vv mysql-bin.00001
    
    • 1
    2.1. 查看binlog日志是否开启

    在这里插入图片描述

    mysql> show master status; #查看当前正在写入的binlog文件
    
    • 1

    如果没有开启的话则可以通过修改 my.ini (windows环境下)或者/etc/my.cnf 配置文件的 log-bin选项。

    在配置文件中加入 log-bin 配置,表示启用binlog,如果没有给定值,写成 log-bin=,则默认名称为主机名。(注:名称若带有小数点,则只取第一个小数点前的部分作为名称)

    [mysqld]
    log-bin=my-binlog-name
    
    • 1
    • 2
    2.2. 通过mysqlbinlog命令查看binlog日志

    mysqlbinlog 是一个查看mysql二进制日志的工具,可以把mysql上面的所有操作记录从日志里导出,默认的安装路径是 :/usr/local/mysql/bin/mysqlbinlog

    可以通过 find / -name "mysqlbinlog" 或者 which mysqlbinlog 命令来查找mysqlbinlog 工具的路径。

    如果输入 mysqlbinlog 命令提示找不到命令的话,则可以通过建立软链的方式。比如我的mysqlbinlog命令在 /data/server/mysql/bin/mysqldump 路径下,可以通过如下命令建立软链解决此问题

    ln -s /data/server/mysql/bin/mysqldump /usr/bin/mysqldump
    
    • 1

    如下是使用mysqlbinlog 命令的基本示例

    # mysqlbinlog 的执行格式
    mysqlbinlog [options] log_file ...
    # 查看bin-log二进制文件(shell方式)
    mysqlbinlog -v --base64-output=decode-rows /var/lib/mysql/master.000003
    
    # 查看bin-log二进制文件(带查询条件)
    mysqlbinlog -v --base64-output=decode-rows /var/lib/mysql/master.000003 \
        --start-datetime="2023-09-11 00:00:00"  \
        --stop-datetime="2023-09-12 00:00:00"   \
        --start-position="5000"    \
        --stop-position="20000"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    这里设置了日志查询的开始时间(2023-09-11 00:00:00),结束时间(2023-09-12 00:00:00),开始位置(5000)以及结束位置(20000)。

    更多的mysqlbinlog命令的操作参数可以通过 mysqlbinlog --help进行查看。

    在这里插入图片描述
    在这里插入图片描述

    mysqlbinlog 日志的部分内容

    #230910 15:38:30 server id 1  end_log_pos 328 CRC32 0x3bb60240 	Query	thread_id=63	exec_time=0	error_code=0
    BEGIN
    /*!*/;
    # at 328
    # at 575
    #230910 15:38:30 server id 1  end_log_pos 658 CRC32 0x20b2fcd1 	Table_map: `db1`.`table1` mapped to number 197
    # has_generated_invisible_primary_key=0
    # at 658
    #230910 15:38:30 server id 1  end_log_pos 771 CRC32 0xa0d5cf45 	Write_rows: table id 197 flags: STMT_END_F
    ### INSERT INTO `db1`.`table1`
    ### SET
    ###   @1=1
    ###   @2=2190000159000076193
    ###   @3=585
    ###   @4=3
    ###   @5=4
    ###   @6=2
    ###   @7=NULL
    ###   @8='2020-06-05 17:04:51'
    ###   @9='2023-09-10 15:38:30'
    ###   @10='1268831135392108546'
    ###   @11=0
    # at 771
    #230910 15:38:30 server id 1  end_log_pos 802 CRC32 0xecd87f75 	Xid = 90733
    COMMIT/*!*/;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    上面的输出包括信息

    position: 位于文件中的位置,即第一行的(# at 230910),说明该事件记录从文件第230910 个字节开始
    timestamp: 事件发生的时间戳,即第二行的(#190308 15:38:30)
    server id: 服务器标识(1)
    end_log_pos 表示下一个事件开始的位置(即当前事件的结束位置+1)
    thread_id: 执行该事件的线程id (thread_id=63)
    exec_time: 事件执行的花费时间
    error_code: 错误码,0意味着没有发生错误
    type:事件类型Query
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    增加 --base64-output=decode-rows –v 选项解析

    (base64-output,可以控制输出语句输出base64编码的BINLOG语句;decode-rows:选项将把基于行的事件解码成一个SQL语句)

    mysqlbinlog --no-defaults --database=db1 --base64-output=decode-rows -v  mysql-bin.000269>/data/server/binlog.sql
    
    • 1

    通过这个命令可以将mysql-bin.000269二进制文件的内容写到binlog.sql文件中。

    删除binlog

    删除binlog 可以通过 reset master 命令来实现。

  • 相关阅读:
    拍摄视频,真的帧率越高越好吗?
    华为企业AP开启IPV6包转发
    window.open 打开后全屏
    历届蓝桥杯青少年编程选拔赛 科技素养题真题讲解 STEMA评测比赛真题解析【持续更新 已更新至18套】
    C++ Reference: Standard C++ Library reference: C Library: cwctype: iswdigit
    航空发动机轴承数据集 | 写论文再也不用担心没数据集啦!
    使用python快速将主机字节序转为网络字节序
    区间预测 | Matlab实现CNN-ABKDE卷积神经网络自适应带宽核密度估计多变量回归区间预测
    “第六十三天”
    口碑好的猫罐头有哪些?宠物店受欢迎的5款猫罐头推荐!
  • 原文地址:https://blog.csdn.net/u014534808/article/details/132910672