深入理解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 默认值就是最合理的设置。

想了想还是专门开了一节来总结这个问题:

5.7.6以下中默认

8481c8f592b7f349aa84a1de5c171db681516edfsimplified_binlog_gtid_recovery=flase

5.7.6以上中默认

8481c8f592b7f349aa84a1de5c171db681516edfbinlog_gtid_simple_recovery=true

默认值就是最合理的设置。
因为参数名更改了所以下面统称simple_recovery来代替。

一、Gtid关闭

8481c8f592b7f349aa84a1de5c171db681516edfsimple_recovery=flase

5.7.6以下:这种方式一定得到正确的Gtid集合

8481c8f592b7f349aa84a1de5c171db681516edf重启 MySQL 需要扫描全部的 BINLOG 来获得正确的 GTID 集合
8481c8f592b7f349aa84a1de5c171db681516edfpurge binlog 或者超过参数 expire_logs_days 参数设置不触发全 BINLOG 扫描,由上层函数控制。因为不支持在线的 GTID 更改。

5.7.6以上:这种方式一定得到正确的Gtid集合

8481c8f592b7f349aa84a1de5c171db681516edf重启 MySQL 扫描全部的 BINLOG
8481c8f592b7f349aa84a1de5c171db681516edfpurge binlog 或者超过参数 expire_logs_days 参数设置触发全 BINLOG 扫描。
8481c8f592b7f349aa84a1de5c171db681516edfsimple_recovery=true

5.7.6以下:这种情况可能得不到正确的GTID集合

8481c8f592b7f349aa84a1de5c171db681516edf重启Mysql不扫描全部的 BINLOG ,只扫描第一个和最后一个 BINLOG
8481c8f592b7f349aa84a1de5c171db681516edfpurge binlog 或者超过参数 expire_logs_days 参数设置不触发全 BINLOG 扫描,由上层函数控制。

5.7.6以上:由于有每个BINLOG都有Previous gtid Event的支持能够得到正确的GTID集合。

8481c8f592b7f349aa84a1de5c171db681516edf重启Mysql不扫描全部的 BINLOG ,只扫描第一个和最后一个 BINLOG
8481c8f592b7f349aa84a1de5c171db681516edfpurge binlog 或者超过参数 expire_logs_days 参数设置不触发全 BINLOG 扫描,只扫描第一个和最后一个 BINLOG

二、Gtid打开

8481c8f592b7f349aa84a1de5c171db681516edfsimple_recovery=flase

5.7.6以下:这种方式一定得到正确的GTID集合。

8481c8f592b7f349aa84a1de5c171db681516edf重启 MySQL 不扫描全部的 BINLOG ,如果是中途打开 GTID ,重启任然需要扫描多个 BINLOG 因为需要找到 Previous gtid Event
8481c8f592b7f349aa84a1de5c171db681516edfpurge binlog或者超过参数 expire_logs_days 参数设置不触发全 BINLOG 扫描,如果是中途打开 GTID 重启,任然需要扫描多个 BINLOG 因为需要找到 Previous gtid Event

5.7.6以上:这种方式一定得到正确的GTID集合

8481c8f592b7f349aa84a1de5c171db681516edf重启Mysql不扫秒全部的 BINLOG ,如果是中途打开 GTID 重启任然需要扫描多个 BINLOG 因为需要找到 GTID EVENT
8481c8f592b7f349aa84a1de5c171db681516edfpurge binlog 或者超过参数 expire_logs_days 参数设置不触发全 BINLOG 扫描,如果是中途打开 GTID 重启任然需要扫描多个 BINLOG 因为需要找到 GTID EVENT
8481c8f592b7f349aa84a1de5c171db681516edfsimple_recovery=true

5.7.6以下:这种情况可能得不到正确的GTID集合

8481c8f592b7f349aa84a1de5c171db681516edf重启Mysql不扫描全部的 BINLOG ,只扫描第一个和最后一个 BINLOG
8481c8f592b7f349aa84a1de5c171db681516edfpurge binlog 或者超过参数 expire_logs_days 参数设置不扫描全部 GTID ,只扫描第一个和最后一个 BINLOG

5.7.6以上:由于有每个BINLOG都有Previous gtid Event的支持能够得到正确的GTID集合。

8481c8f592b7f349aa84a1de5c171db681516edf重启Mysql不扫描全部的 BINLOG ,只扫描第一个和最后一个 BINLOG
8481c8f592b7f349aa84a1de5c171db681516edfpurge binlog 或者超过参数 expire_logs_days 参数设置不触发全 BINLOG 扫描,只扫描第一个和最后一个 BINLOG

三、本节总结

8481c8f592b7f349aa84a1de5c171db681516edf5.7.6以下保持默认设置 simplified_binlog_gtid_recovery=flase ,但是这会导致过多的 BINLOG 扫描,况且5.6没有 mysql.gtid_executed 的支持,从库必须开启 log_slave_updates ,这会带来性能影响。所以还是少用 GTID
8481c8f592b7f349aa84a1de5c171db681516edf5.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集合,也是前面讨论的。

学习完本节至少能够学习到:

8481c8f592b7f349aa84a1de5c171db681516edfbinlog_gtid_simple_recovery/simplified_binlog_gtid_recovery是如何影响BINLOG文件的扫描的的
8481c8f592b7f349aa84a1de5c171db681516edf5.7.6以下应该如何设置
8481c8f592b7f349aa84a1de5c171db681516edf5.7.6以上应该如何设置

原文发布时间为:2018-03-9
本文作者:
高鹏(重庆八怪)
本文来自云栖社区合作伙伴“老叶茶馆”,了解相关信息可以关注“ 老叶茶馆 ”微信公众号
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
12天前
|
存储 SQL 关系型数据库
mysql 的ReLog和BinLog区别
MySQL中的重做日志(Redo Log)和二进制日志(Binary Log)是两种重要的日志系统。重做日志主要用于保证事务的持久性和原子性,通过记录数据页的物理修改信息来恢复未提交的事务更改。二进制日志则记录了数据库的所有逻辑变化操作,用于数据的复制、恢复和审计。两者在写入时机、存储方式、配置参数和使用范围上有所不同,共同确保了数据库的稳定性和可靠性。
|
16天前
|
缓存 监控 关系型数据库
如何根据监控结果调整 MySQL 数据库的参数以提高性能?
【10月更文挑战第28天】根据MySQL数据库的监控结果来调整参数以提高性能,需要综合考虑多个方面的因素
55 1
|
2月前
|
存储 SQL 关系型数据库
【MySQL调优】如何进行MySQL调优?从参数、数据建模、索引、SQL语句等方向,三万字详细解读MySQL的性能优化方案(2024版)
MySQL调优主要分为三个步骤:监控报警、排查慢SQL、MySQL调优。 排查慢SQL:开启慢查询日志 、找出最慢的几条SQL、分析查询计划 。 MySQL调优: 基础优化:缓存优化、硬件优化、参数优化、定期清理垃圾、使用合适的存储引擎、读写分离、分库分表; 表设计优化:数据类型优化、冷热数据分表等。 索引优化:考虑索引失效的11个场景、遵循索引设计原则、连接查询优化、排序优化、深分页查询优化、覆盖索引、索引下推、用普通索引等。 SQL优化。
542 15
【MySQL调优】如何进行MySQL调优?从参数、数据建模、索引、SQL语句等方向,三万字详细解读MySQL的性能优化方案(2024版)
|
2月前
|
消息中间件 canal 关系型数据库
Maxwell:binlog 解析器,轻松同步 MySQL 数据
Maxwell:binlog 解析器,轻松同步 MySQL 数据
304 11
|
1月前
|
SQL 关系型数据库 MySQL
数据库:MYSQL参数max_allowed_packet 介绍
数据库:MYSQL参数max_allowed_packet 介绍
65 2
|
27天前
|
存储 关系型数据库 MySQL
MySQL中的Redo Log、Undo Log和Binlog:深入解析
【10月更文挑战第21天】在数据库管理系统中,日志是保障数据一致性和完整性的关键机制。MySQL作为一种广泛使用的关系型数据库管理系统,提供了多种日志类型来满足不同的需求。本文将详细介绍MySQL中的Redo Log、Undo Log和Binlog,从背景、业务场景、功能、底层实现原理、使用措施等方面进行详细分析,并通过Java代码示例展示如何与这些日志进行交互。
60 0
|
9天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
24 1
|
11天前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
26 4
|
1月前
|
存储 关系型数据库 MySQL
Mysql(4)—数据库索引
数据库索引是用于提高数据检索效率的数据结构,类似于书籍中的索引。它允许用户快速找到数据,而无需扫描整个表。MySQL中的索引可以显著提升查询速度,使数据库操作更加高效。索引的发展经历了从无索引、简单索引到B-树、哈希索引、位图索引、全文索引等多个阶段。
61 3
Mysql(4)—数据库索引
|
18天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
85 1