mysql5.7性能提升一百倍调优宝典(11)


如果不配的后果:

默认为0
配置实例:
sync_binlog = 1
60)gtid_mode
推荐设置:
on
作用:
  1. 主从复制时用,推荐开启成on,它的用处就是允许你在从库上进行”备份“,从库上在进行备份时它能够获取主库的binlog位点 。
  2. 该参数也可以动态在线设定 。如果你要在线运行时设定,在my.cnf文件中必须把它设成on 。在开启该参数时,log-bin和log-slave-updates也必须开启,否则MySQL Server拒绝启动,当开启GTID模式时,集群中的全部MySQL Server必须同时配置gtid_mod = ON,否则无法同步 。
如果不配的后果:
默认为off
配置实例:
gtid_mode = on
61)enforce_gtid_consistency
推荐设置:
1
作用:
主从复制时用,见gtid_mode,这是牵连参数,随着gtid_mode的开启一起开启 。
如果不配的后果:
必须跟着gtid_mode一起开启,要不然mysql实例起不来 。
配置实例:
enforce_gtid_consistency = 1
62)log_slave_updates
推荐设置:
它只要标注在my.cnf里就代表起作用了 。
作用:
主从复制时用,见gtid_mode,这是牵连参数,随着gtid_mode的开启一起开启 。它只要标注在这就可以了,代表开启,否则也就不要有这一行了 。
如果不配的后果:
它是牵连参数,随着gtid_mode的开启一起开启 。
配置实例:
log_slave_updates
63)binlog_format
推荐设置:
row
作用:
主从复制时用,mysql5.7有3种bin log模式:
1. STATEMENT:历史悠久,技术成熟,binlog文件较小,binlog中包含了所有数据库更改信息,可以据此来审核数据库的安全等情况 。binlog可以用于实时的还原,而不仅仅用于复制主从版本可以不一样,从服务器版本可以比主服务器版本高 。缺点是:不是所有的UPDATE语句都能被复制,尤其是包含不确定操作的时候 。调用具有不确定因素的 UDF 时复制也可能出问题,使用以下函数的语句也无法被复制:
* LOAD_FILE()
* UUID()
* USER()
* FOUND_ROWS()
* SYSDATE() (除非启动时启用了 --sysdate-is-now 选项)
2.同时,INSERT ... SELECT 会产生比 ROW 更多的行级锁,复制需要进行全表扫描(WHERE 语句中没有使用到索引)的 UPDATE 时,需要比 RBR 请求更多的行级锁
3.对于有 AUTO_INCREMENT 字段的 InnoDB表而言,INSERT 语句会阻塞其他 INSERT 语句,对于一些复杂的语句,在从服务器上的耗资源情况会更严重,而 RBR 模式下,只会对那个发生变化的记录产生影响,存储函数(不是存储过程)在被调用的同时也会执行一次 NOW() 函数,这个可以说是坏事也可能是好事,确定了的 UDF 也需要在从服务器上执行,数据表必须几乎和主服务器保持一致才行,否则可能会导致复制出错,执行复杂语句如果出错的话,会消耗更多资源 。
2. ROW:任何情况都可以被复制,这对复制来说是最安全可靠的,和其他大多数数据库系统的复制技术一样 。多数情况下,从服务器上的表如果有主键的话,复制就会快了很多 。复制以下几种语句时的行锁更少:
* INSERT ... SELECT
* 包含 AUTO_INCREMENT 字段的 INSERT
* 没有附带条件或者并没有修改很多记录的 UPDATE 或 DELETE 语句
执行 INSERT,UPDATE,DELETE 语句时锁更少,从服务器上采用多线程来执行复制成为可能,它的缺点是:inlog 大了很多,复杂的回滚时 binlog 中会包含大量的数据,主服务器上执行 UPDATE 语句时,所有发生变化的记录都会写到 binlog 中,而 SBR 只会写一次,这会导致频繁发生 binlog 的并发写问题,UDF 产生的大 BLOB 值会导致复制变慢,无法从 binlog 中看到都复制了写什么语句 。
从安全和稳定性的缩合考虑上来说我们选择ROW模式 。
3. 混合式-不推荐
如果不配的后果:
5.7.6之前默认为STATEMENT模式 。MySQL 5.7.7之后默认为ROW模式
配置实例:
binlog_format = row
64)relay_log
主从复制用,定义relay_log的位置和名称,如果值为空,则默认位置在数据文件的目录(datadir),文件名为host_name-relay-bin.nnnnnn(By default, relay log file names have the form host_name-relay-bin.nnnnnn in the data directory)


推荐阅读