作者:高鹏(重庆八怪)
原文地址:
深入理解MySQL 5.7 GTID系列文章共十篇,本文为第四篇,
第二篇:深入理解MySQL 5.7 GTID系列(二):GTID相关内部数据结构
第三篇:深入理解MySQL 5.7 GTID系列(三):GTID的生成时机
第四篇:
深入理解MySQL 5.7 GTID系列(四):mysql.gtid_executed&PREVIOUS GTID EVENT
第五篇:深入理解MySQL 5.7 GTID系列(五) gtid_executed>id_purged什么时候更新
第六篇:深入理解MySQL 5.7 GTID系列(六):MySQL启动初始化GTID模块
该系列文章将陆续不定期更新~
想了想还是专门开了一节来总结这个问题:
5.7.6以下中默认
simplified_binlog_gtid_recovery=flase
5.7.6以上中默认
binlog_gtid_simple_recovery=true
默认值就是最合理的设置。
因为参数名更改了所以下面统称simple_recovery来代替。
一、Gtid关闭
simple_recovery=flase
5.7.6以下:这种方式一定得到正确的Gtid集合
重启MySQL需要扫描全部的BINLOG来获得正确的GTID集合
purge binlog或者超过参数expire_logs_days参数设置不触发全BINLOG扫描,由上层函数控制。因为不支持在线的GTID更改。
5.7.6以上:这种方式一定得到正确的Gtid集合
重启MySQL扫描全部的BINLOG。
purge binlog或者超过参数expire_logs_days参数设置触发全BINLOG扫描。
simple_recovery=true
5.7.6以下:这种情况可能得不到正确的GTID集合
重启Mysql不扫描全部的BINLOG,只扫描第一个和最后一个BINLOG。
purge binlog或者超过参数expire_logs_days参数设置不触发全BINLOG扫描,由上层函数控制。
5.7.6以上:由于有每个BINLOG都有Previous gtid Event的支持能够得到正确的GTID集合。
重启Mysql不扫描全部的BINLOG,只扫描第一个和最后一个BINLOG。
purge binlog或者超过参数expire_logs_days参数设置不触发全BINLOG扫描,只扫描第一个和最后一个BINLOG。
二、Gtid打开
simple_recovery=flase
5.7.6以下:这种方式一定得到正确的GTID集合。
重启MySQL不扫描全部的BINLOG,如果是中途打开GTID,重启任然需要扫描多个BINLOG因为需要找到Previous gtid Event。
purge binlog或者超过参数expire_logs_days参数设置不触发全BINLOG扫描,如果是中途打开GTID重启,任然需要扫描多个BINLOG因为需要找到Previous gtid Event。
5.7.6以上:这种方式一定得到正确的GTID集合
重启Mysql不扫秒全部的BINLOG,如果是中途打开GTID重启任然需要扫描多个BINLOG因为需要找到GTID EVENT。
purge binlog或者超过参数expire_logs_days参数设置不触发全BINLOG扫描,如果是中途打开GTID重启任然需要扫描多个BINLOG因为需要找到GTID EVENT。
simple_recovery=true
5.7.6以下:这种情况可能得不到正确的GTID集合
重启Mysql不扫描全部的BINLOG,只扫描第一个和最后一个BINLOG。
purge binlog或者超过参数expire_logs_days参数设置不扫描全部GTID,只扫描第一个和最后一个BINLOG。
5.7.6以上:由于有每个BINLOG都有Previous gtid Event的支持能够得到正确的GTID集合。
重启Mysql不扫描全部的BINLOG,只扫描第一个和最后一个BINLOG。
purge binlog或者超过参数expire_logs_days参数设置不触发全BINLOG扫描,只扫描第一个和最后一个BINLOG。
三、本节总结
5.7.6以下保持默认设置simplified_binlog_gtid_recovery=flase,但是这会导致过多的BINLOG扫描,况且5.6没有mysql.gtid_executed的支持,从库必须开启log_slave_updates,这会带来性能影响。所以还是少用GTID。
5.7.6以上由于对每个BINLOG都有Previous gtid Event的支持binlog_gtid_simple_recovery=true是合理的设置,BINLOG扫描非常的快因为只是第一个和最后一个BINLOG文件而已。
可以看到Gtid也越来越成熟了。这部分的逻辑在函MYSQL_BIN_LOG::init_gtid_sets中前文已经提到过,这里就不看代码了。
此外在5.7的官方文档中对binlog_gtid_simple_recovery=true 有如下警告的描述:
如果将参数设置为true可能在老版本中得不到正确的GTID集合,也是前面讨论的。
学习完本节至少能够学习到:
binlog_gtid_simple_recovery/simplified_binlog_gtid_recovery是如何影响BINLOG文件的扫描的的
5.7.6以下应该如何设置
5.7.6以上应该如何设置
对本文有任何疑问可扫码添加原文作者微信
知数堂
叶金荣与吴炳锡联合打造
领跑IT精英培训
行业资深专家强强联合,倾心定制
MySQL实战/MySQL优化 /大数据实战/ Python/ SQL优化
数门精品课程
紧随技术发展趋势,定期优化培训教案
融入大量生产案例,贴合企业一线需求
社群陪伴学习,一次报名,可学1年
DBA、开发工程师必修课
上千位学员已华丽转身,薪资翻番,职位提升
改变已悄然发生,你还在等什么?
扫码下载知数堂精品课程试听视频
(MySQL 实战/优化、大数据实战、Python开发,及SQL优化等课程)
密码:hg3h

