MySQL的binlog日志

2018-06-17  本文已影响101人  basetree


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语句。

上一篇下一篇

猜你喜欢

热点阅读