美文网首页
MySQL的binlog日志

MySQL的binlog日志

作者: basetree | 来源:发表于2018-06-17 11:38 被阅读101次


    binglog的基本认识

        MySQL的二进制日志是MySQL重要的日志,它记录了所有的DDL和DML(除了数据查询语句)语句,以事件形式记录。
        一般来说开启二进制日志大概会有1%的性能损耗。二进制有两个最重要的使用场景:
    (1) MySQLReplication在Master端开启binlog,Mster把它的二进制日志传递给slaves来达到master-slave数据一致的目的。
    (2) 数据恢复,通过使用mysqlbinlog工具来使恢复数据。

        二进制日志包括两类文件:二进制日志索引文件(文件名后缀为.index)用于记录所有的二进制文件,二进制日志文件(文件名后缀为.00000*)记录数据库所有的DDL和DML(除了数据查询语句)语句事件。

    开启binlog日志

    (1)打开mysql的配置文件
     sudo vim /etc/mysql/my.cnf

    (2)找到Logging and Replication,去掉log_bin的注释,如果找不到的话,可以在[mysqld]区块自己添加 log_bin = /var/log/mysql/mysql-bin.log

    (3)重启mysqld服务
     sudo service mysql restart;

    my.cnf配置文件

    查看binlog是否开启

    登录mysql
    mysql> show variables like 'log_bin';


    log_bin开启状态

     ON表示开启了binlog,OFF表示没有开启。

    常用binlog日志操作命令

    (1) 查看所有binlog日志列表
    mysql> show master logs;

    binlog日志列表

    (2) 查看master状态,即最后(最新)一个binlog日志的编号名称,及其最后一个操作事件pos结束点(Position)值。
    mysql> show master status;

    status

    (3) 刷新log日志,自此刻开始产生一个新编号的binlog日志文件。
    mysql> flush logs;

    新编号的binlog日志文件

    (4) 重置(清空)所有binlog日志
    mysql> reset master;

    重置所有binlog日志

    查看binlog日志内容

    (1) 进入MySQL的日志目录,由上面可以知道路径。 
     cd /var/log/mysql

    (2) 使用mysqlbinlog自带查看命令,binlog是二进制文件,普通文件查看器cat more vim等都无法打开,必须使用自带的 mysqlbinlog 命令查看。(这里打开的二进制日志为mysql-bin.000001)。
     sudo mysqlbinlog mysql-bin.000001,如果报错,请执行下面这一句
     sudo mysqlbinlog --no-defaults mysql-bin.000001

    上面这种办法读取出binlog日志的全文内容较多,不容易分辨查看pos点信息,这里介绍一种更为方便的查询命令:
    mysql> show binlog events [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count];
    选项解析:
    [IN 'log_name']  指定要查询的binlog文件名(不指定就是第一个binlog文件。
    [FROM pos]        指定从哪个pos起始点开始查起(不指定就是从整个文件首个pos点开始算)。
    [LIMIT offset]      偏移量(不指定就是0)。
    [row_count]        查询总条数(不指定就是所有行)。

    A.查询第一个(最早)的binlog日志:
      mysql> show binlog events\G;

    B.指定查询mysql-bin.000001 这个文件:
     mysql> show binlog events in 'mysql-bin.000001'\G;

    C.指定查询mysql-bin.000001 这个文件,从pos点:8224开始查起:
     mysql> show binlog events in 'mysql-bin.000001' from 8224\G;

    D.指定查询mysql-bin.000001 这个文件,从pos点:8224开始查起,查询10条
     mysql> show binlog events in 'mysql-bin.000001' from 8224 limit 10\G;

    E.指定查询mysql-bin.000001 这个文件,从pos点:8224开始查起,偏移2行,查询10条
    mysql> show binlog events in 'mysql-bin.000001' from 8224 limit 2,10\G;

    二进制日志格式

    二进制日志

    方框中第一行表示的是包含日志文件的偏移字节值(这里为199),第二行包含如下:

    (1) 事件的日期和时间,MySQL会使用它们来产生 SET TIMESTAMP语句。

    (2) server id:原服务器的服务器Id    end_log_pos:下一个事件的偏移字节值    

         Query:时间类型,本例为Query,有很多事件类型

        thread_id:原服务器上执行的线程Id

        exec_time:语句的时间戳写进二进制文件的时间差

        error_code:原服务器上执行事件产生的错误代码

    (3) 接下来为执行的SQL语句。

    相关文章

      网友评论

          本文标题:MySQL的binlog日志

          本文链接:https://www.haomeiwen.com/subject/xiybeftx.html