深入理解MySQL 5.7 GTID系列(七)binlog_gtid_simple_recovery参数的影响总结
2018-03-09 00:00
1056 查看
作者:高鹏(重庆八怪)原文地址:深入理解MySQL 5.7 GTID系列文章共十篇,本文为第四篇,第一篇:深入理解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来代替。
purge binlog或者超过参数expire_logs_days参数设置不触发全BINLOG扫描,由上层函数控制。因为不支持在线的GTID更改。
5.7.6以上:这种方式一定得到正确的Gtid集合重启MySQL扫描全部的BINLOG。
purge binlog或者超过参数expire_logs_days参数设置触发全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。
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。
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以上由于对每个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 有如下警告的描述:
5.7.6以下应该如何设置
5.7.6以上应该如何设置
对本文有任何疑问可扫码添加原文作者微信
知数堂叶金荣与吴炳锡联合打造领跑IT精英培训行业资深专家强强联合,倾心定制MySQL实战/MySQL优化 /大数据实战/ Python/ SQL优化数门精品课程紧随技术发展趋势,定期优化培训教案融入大量生产案例,贴合企业一线需求社群陪伴学习,一次报名,可学1年DBA、开发工程师必修课上千位学员已华丽转身,薪资翻番,职位提升改变已悄然发生,你还在等什么?
扫码下载知数堂精品课程试听视频(MySQL 实战/优化、大数据实战、Python开发,及SQL优化等课程)密码:hg3h
第二篇:深入理解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 有如下警告的描述:
If this option is enabled, gtid_executed and gtid_purged may be initialized incorrectly in the following situations: • The newest binary log was generated by MySQL 5.7.5 or older, and gtid_mode was ON for some binary logs but OFF for the newest binary log. • A SET GTID_PURGED statement was issued on a MySQL version prior to 5.7.7, and the binary log that was active at the time of the SET GTID_PURGED has not yet been purged. If an incorrect GTID set is computed in either situation, it will remain incorrect even if the server is later restarted, regardless of the value of this option.如果将参数设置为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
相关文章推荐
- 深入理解MySQL 5.7 GTID系列(二):GTID相关内部数据结构
- 深入理解MySQL 5.7 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_executed&PREVIOUS GTID EVENT
- 深入理解MySQL 5.7 GTID系列(三):GTID的生成时机
- 深入理解MySQL 5.7 GTID系列(一)
- 深入理解MySQL 5.7 GTID系列(八):GTID带来的运维改变
- 深入理解MySQL 5.7 GTID系列(六):MySQL启动初始化GTID模块
- .Net Discovery系列之-深入理解平台机制与性“.NET技术”能影响(下)
- 前端周报:前端面试题及答案总结;JavaScript参数传递的深入理解
- MySQL 5.7 (2GTID,binlog)
- 深入理解mysql之BDB系列(1)---BDB相关基础知识
- .Net Discovery系列之十-深入理解平台机制与性能影响(上)
- 深入理解mysql之BDB系列(1)---BDB相关基础知识
- 深入理解mysql之BDB系列(3)---数据页结构(摘自老杨)
- 深入理解mysqldump参数 --single-transaction --lock-all-tables
- .Net Discovery系列之十二-深入理解平台机制与性能影响(下)
- [深入理解MySQL系列] - mysqldump的几个主要选项探究
- 深入理解mysql之BDB系列(2)---数据元页结构