Mysql 5.7 Gtid内部学习(七) 总结binlog_gtid_simple_recovery参数带来的影响

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介:


想了想还是专门开了一节来总结这个问题
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参数设置不扫描全部binlog,只扫描第一个和最后一个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以上应该如何设置
作者微信


微信.jpg
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
20天前
|
canal 消息中间件 关系型数据库
Canal作为一款高效、可靠的数据同步工具,凭借其基于MySQL binlog的增量同步机制,在数据同步领域展现了强大的应用价值
【9月更文挑战第1天】Canal作为一款高效、可靠的数据同步工具,凭借其基于MySQL binlog的增量同步机制,在数据同步领域展现了强大的应用价值
116 4
|
30天前
|
SQL 关系型数据库 MySQL
【揭秘】MySQL binlog日志与GTID:如何让数据库备份恢复变得轻松简单?
【8月更文挑战第22天】MySQL的binlog日志记录数据变更,用于恢复、复制和点恢复;GTID为每笔事务分配唯一ID,简化复制和恢复流程。开启binlog和GTID后,可通过`mysqldump`进行逻辑备份,包含binlog位置信息,或用`xtrabackup`做物理备份。恢复时,使用`mysql`命令执行备份文件,或通过`innobackupex`恢复物理备份。GTID模式下的主从复制配置更简便。
124 2
|
1月前
|
SQL 关系型数据库 MySQL
【MySQL】根据binlog日志获取回滚sql的一个开发思路
【MySQL】根据binlog日志获取回滚sql的一个开发思路
|
1月前
|
关系型数据库 MySQL Shell
MySQL回滚脚本: 误操作delete binlog回滚shell脚本
MySQL回滚脚本: 误操作delete binlog回滚shell脚本
|
1月前
|
关系型数据库 MySQL 数据库
MySQL回滚工具:binlog 闪回工具 MyFlash工具
MySQL回滚工具:binlog 闪回工具 MyFlash工具
|
3天前
|
NoSQL 关系型数据库 MySQL
微服务架构下的数据库选择:MySQL、PostgreSQL 还是 NoSQL?
在微服务架构中,数据库的选择至关重要。不同类型的数据库适用于不同的需求和场景。在本文章中,我们将深入探讨传统的关系型数据库(如 MySQL 和 PostgreSQL)与现代 NoSQL 数据库的优劣势,并分析在微服务架构下的最佳实践。
|
5天前
|
存储 SQL 关系型数据库
使用MySQL Workbench进行数据库备份
【9月更文挑战第13天】以下是使用MySQL Workbench进行数据库备份的步骤:启动软件后,通过“Database”菜单中的“管理连接”选项配置并选择要备份的数据库。随后,选择“数据导出”,确认导出的数据库及格式(推荐SQL格式),设置存储路径,点击“开始导出”。完成后,可在指定路径找到备份文件,建议定期备份并存储于安全位置。
66 11
|
25天前
|
弹性计算 关系型数据库 数据库
手把手带你从自建 MySQL 迁移到云数据库,一步就能脱胎换骨
阿里云瑶池数据库来开课啦!自建数据库迁移至云数据库 RDS原来只要一步操作就能搞定!点击阅读原文完成实验就可获得一本日历哦~
|
28天前
|
关系型数据库 MySQL 数据库
RDS MySQL灾备服务协同解决方案构建问题之数据库备份数据的云上云下迁移如何解决
RDS MySQL灾备服务协同解决方案构建问题之数据库备份数据的云上云下迁移如何解决
|
6天前
|
存储 SQL 关系型数据库
一篇文章搞懂MySQL的分库分表,从拆分场景、目标评估、拆分方案、不停机迁移、一致性补偿等方面详细阐述MySQL数据库的分库分表方案
MySQL如何进行分库分表、数据迁移?从相关概念、使用场景、拆分方式、分表字段选择、数据一致性校验等角度阐述MySQL数据库的分库分表方案。
一篇文章搞懂MySQL的分库分表,从拆分场景、目标评估、拆分方案、不停机迁移、一致性补偿等方面详细阐述MySQL数据库的分库分表方案