码迷,mamicode.com
首页 > 其他好文 > 详细

binlog_format的模式有哪几种?各自的特点是?

时间:2020-09-08 20:40:06      阅读:47      评论:0      收藏:0      [点我收藏+]

标签:主从复制   更新   log   uid   data-   form   sql语句   base   sysdate   

1. statement(默认模式)

缺点:主从复制有延时,当写操作的SQL里存在函数时,会造成主从复制不一致。

 

特点:

(1)此模式不支持RU,RC隔离级别;

(2)binglog日志文件中上一个事物的结束点是下一个事物的开始点;

(3)DML,DDL语句都会明文显示;

(4)对一些系统函数不能准确复制或者不能复制,如load_file()、uuid()、user()、found_rows()、sysdate(),注意(now()可以复制; )

(5)主库执行delete from t1 where c1=xxx limit 1,statement模式下,从库也会这么执行,可能导致删除的不是同一行数据

(6)主库有id=1和id=10两行数据,从库有id=1,2,3,10这四行数据,主库执行delete from t1 where id<10命令,从库删除过多数据;

 

什么场景会用到statement模式:

(1)一次更新大量数据,如二十万数据,否则在复制的时候,从库可能会追的太慢,导致延时;

(2)使用pt-table-checksum工具时会使用到statement模式;

 

2. row

优点:不在binlog日志里记录写SQL了,而是记执行完SQL后每一行的改变,避免了写SQL存在函数时主从复制不一致的情况。

缺点:行模式记录每一行的改变,主机和从机都记录,效率有问题。

 

(1)相对statement更加安全;

(2)在表有主键的情况下复制更加快;

(3)系统的特殊函数也能复制;

(4)更少的锁,只有行锁;

(5)binlog文件比较大,如单语句更新20万行数据,可能要半小时,也有可能把主库跑挂;

(6)无法从binog看见用户执行的SQL语句(mysql 5.6后通过设置binlog_rows_query_log_events=on,日志格式为row中的binlog日志中看到执行过得SQL语句。)

(7)5.7默认的日志模式为row;

(8)DDL语句明文显示,DML语句加密显示;

(9)DML经过base64加密,需要使用参数--base64-output=decode-rows --verbose;

(10)update修改的语句可以看到历史旧数据;

 

3. mixed

优点:判断写操作里有没有函数,有函数就切换到行模式,没有就使用statement模式。

缺点:SQL中有@@hostname这种系统变量时,无法判断,就会出现主从复制不一致的情况。

 

特点:

(1)innodb引擎,如果隔离级别是RU、RC,则mixed模式会转成Row模式存储;

(2)mixed模式下,在以下几种情况会自动将binlog的模式有SBR转化成RBR模式:

当更新一个NDB表时;

当函数包含uuid()函数时;

2个及以上包含auto_increment字段的表被更新时;

视图中必须要求使用RBR时,如创建视图时使用了uuid()函数;

(以上内容部分转载自https://yq.aliyun.com/articles/647798#

binlog_format的模式有哪几种?各自的特点是?

标签:主从复制   更新   log   uid   data-   form   sql语句   base   sysdate   

原文地址:https://www.cnblogs.com/yanwuliu/p/13576487.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!