二进制日志相关参数及命令

 

一、二进制日志记录模式

binlog模式总共可分为以下三种:row,statement,mixed

1.Row
日志中会记录成每一行数据被修改的形式,然后在slave端再对相同的数据进行修改,只记录要修改的数据,只有value,不会有sql多表关联的情况。
优点:在row模式下,bin-log中可以不记录执行的sql语句的上下文相关的信息,仅仅只需要记录那一条记录被修改了,修改成什么样了,所以row的日志内容会非常清楚的记录下每一行数据修改的细节,非常容易理解。而且不会出现某些特定情况下的存储过程和function,以及trigger的调用和出发无法被正确复制问题。
缺点:在row模式下,所有的执行的语句当记录到日志中的时候,都将以每行记录的修改来记录,这样可能会产生大量的日志内容。

2.statement
每一条会修改数据的sql都会记录到master的binlog中,slave在复制的时候sql进程会解析成和原来master端执行多相同的sql再执行。
优点:在statement模式下首先就是解决了row模式的缺点,不需要记录每一行数据的变化减少了binlog日志量,节省了I/O以及存储资源,提高性能。因为他只需要激励在master上所执行的语句的细节一届执行语句时候的上下的信息。
缺点:在statement模式下,由于他是记录的执行语句,所以,为了让这些语句在slave端也能正确执行,那么他还必须记录每条语句在执行的时候的一些相关信息,也就是上下文信息,以保证所有语句在slave端被执行的时候能够得到和在master端执行时候相同的结果。另外就是,由于mysql现在发展比较快,很多的新功能不断的加入,使mysql的复制遇到了不小的挑战,自然复制的时候涉及到越复杂的内容,bug也就越容易出现。在statement中,目前已经发现不少情况会造成Mysql的复制出现问题,主要是修改数据的时候使用了某些特定的函数或者功能的时候会出现,比如:sleep()函数在有些版本中就不能被正确复制,在存储过程中使用了last_insert_id()函数,可能会使slave和master上得到不一致的id等等。由于row是基于每一行来记录的变化,所以不会出现,类似的问题。

3.Mixed(该模式是STATEMENT和ROW的混合使用。)
早起的MySQL一直都只有基于statemen 的复制模式,直到5.1.5版本的MySQL才开始支持row 复制。从5.0 开始,MySQL的复制已经解决了大量老版本中出现的无法正确复制的问题。但是由于存储过程的出现,给 MySQL Replication 又带来了更大的新挑战。
从5.1.8 版本开始,MySQL 提供了除 Statement 和 Row 之外的第三种复制模式:Mixed,实际上就是前两种模式的结合。
在 Mixed 模式下,MySQL 会根据执行的每一条具体的 SQL 语句来区分对待记录的日志形式,也就是在 statement 和 row 之间选择一种。
新版本中的 statment 还是和以前一样,仅仅记录执行的语句。而新版本的 MySQL 中对 row 模式也被做了优化,并不是所有的修改都会以 row 模式来记录,比如遇到表结构变更的时候就会以 statement 模式来记录,如果 SQL 语句确实就是 update 或者 delete 等修改数据的语句,那么还是会记录所有行的变更。

 

、二进制日志参数

log_bin:控制是否开启二进制日志

sql_log_bin:控制当前会话是否生成二进制日志,一般用于想在主库做操作,但又不想复制到slave上,此参数不可在my.cnf上                              面设置。

Expire_logs_days :二进制日志自动删除的天数。默认为0,0表示不会自动删除。
max_binlog_size:如果二进制日志写入的内容超出给定值,日志就会发生滚动。默认1G,范围为4096~1073741824字节。

sync_binlog:控制mysql怎么刷新二进制日志到磁盘,默认是0,意味着mysql并不刷新,由操作系统自己决定什么时候刷新缓存到持久化设置,这个是由内存的缓存机制决定的,如果这个值比0大,它指定了两次刷新到磁盘的动作之间间隔多少次二进制日志写操作;如果没有设置它为1,那么崩溃后可能导致二进制日志没有同步事务数据,这可以轻而易举的导致复制中断,并且使得及时恢复变得不可能,无论如何,可以把这个值设置为1来获得安全的保障,这样就会要求mysql同步把二进制日志和事务日志这两个文件刷新到两个不同的位置,这可能需要磁盘寻道,相对来说是个很慢的操作。

 

、二进制相关命令

查看二进制日志文件列表:

show binary logs;

show master logs;

 

 

 

查看正在使用的二进制日志文件:

show master status;

 

 

查看二进制文件中的事件:

show binlog events

show binlog events in 'log-bin.000002' (查看指定二进制文件)

 

 

滚动一次二进制日志文件(重启mysql也会滚动一次):

flush logs;

 

使用系统命令查看二进制日志文件,因为二进制日志文件使用二进制方式写入的,故不可使用cat命令取查看该文件,可以用mysqlbinlog命令,例如查看log-bin.000006这个文件(--start   --stop是用于显示指定position值,不加就是显示整个文件):

mysqlbinlog --start-position 1 --stop-position 10  log-bin.000006

 

 

 

参考:https://www.cnblogs.com/kevingrace/p/5569652.html

          http://www.zsythink.net/archives/1286

 

 

 

 

 

发布了30 篇原创文章 · 获赞 27 · 访问量 7万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章