MySQL日志——配置与查看二进制日志

二进制日志文件的配置操作

        二进制日志文件包括了  hostName-bin.00000x  以及 hostName-bin.index,Index这个是所有的二进制日志的索引文件。

       通过修改my.cnf文件的方式来开启二进制日志了。只要添加log_bin就可以开启,其他的都使用默认。例如:

       

      

        也可以通过set命令修改以实现立即生效而不用重启服务

        SET  @@global.log_bin=1;



查看二进制日志

        1.查看和分析二进制日志的结果

        二进制日志文件中就是二进制的数据,因此不能直接使用文本命令或工具查看,需要使用专门的工具。mysql自带的mysqlbinlog就是一个用于查看二进制日志文件的工具,使用方式如下:

        mysqlbinlog  hostName-bin.00001   即直接将二进制日志文件指定给该命令即可。


        二进制日志中的每条记录是从一个 “at 数字”开始到一个“at 数字”结束,之间是一条二进制日志记录。每条记录的end_log_pos的值与记录结束的at后的值是一致的。

        例如:

        MySQL日志——配置与查看二进制日志_第1张图片


        2.二进制日志的格式

        show variables  like‘%binlog%’; 结果中的binlog_format就是用来更改二进制日志的格式,默认为STATEMENT,这种默认格式中的二进制日志所记录的是具体下达的修改数据的sql语句。还有两种格式分别是ROW或MIXED,ROW的格式是事务性或称为行的二进制日志,会将当前对数据的操作以事务的方式记录下来。MIXED是基于ROW的,有可能是STATEMENT格式,也就是一种混合格式,但以ROW格式为主;例如数据库中有的表使用MYISAM引擎,有的表使用Innodb引擎,那么MYISAM引擎的就会使用STATEMENT格式。

        如果是replication环境,那么binlog_format建议设置为ROW格式,即以事务的格式来记录,并且replicaton环境要使用事务型引擎而不要使用非事务型引擎。


        例如:set  global binlog_format=ROW  或 set binlog_format=ROW  (只设置当前会话的)

       


        修改格式后的二进制日志不会创建新的文件也不会影响之前的日志,会在当前日志文件中继续按照新的格式添加二进制日志。如果是ROW格式,那么就是会将一个事务以二进制形式写到日志中,而不再是默认STATEMENT那种格式中是讲sql语句以及相关信息存储在二进制日志中,ROW格式的是无法看懂的,即使使用mysqlbinlog工具也无法可读,都是一些字母。如果要查看ROW格式的日志那么需要mysqlbinlog 使用“-v”选项才可以 :  mysqlbinlog  -v localhost-bin.00002   这样会将其中对事务的二进制描述转换为类似的SQL的形式展示出来。

       


         二进制日志对于触发器所执行的操作也会记录下来,反正所有对数据的修改都会记录。但是如果二进制日志格式为STATEMENT格式则不会记录触发器所执行的操作,因为触发器是编译后的SQL语句,而STATEMENT只记录的是SQL语句。因此如果是replicaton环境,则记得要修改二进制日志格式为ROW,因为ROW格式记录的最完整。或者最好不要使用触发器、存储过程这些东西。


        3.mysqlbinlog使用进阶

        介绍mysqlbinlog的可用选项,如下:

        Ø  --start-datetime=name

        Ø  --stop-datetime=name

        Ø  --j或--start-position=#

        Ø  --stop-position=#

        以上参数分为两组,可以以起止时间方式或起止编号的方式查看某一段二进制日志。如果数据库非常繁忙,那么每秒都会产生非常多的二进制日志而start/stop-position的精确度只能到秒,因此可以通过start-position和stop-position的方式以某个操作的索引编号方式来查看。一个position段就是一个事务的操作。


      

你可能感兴趣的:(系统运维)