MySQL内核月报 2014.09-MySQL· 捉虫动态·GTID 和 binlog_checksum

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

现象描述

  在5.6主备环境下,主备都开启GTID-MODE,备库开启crc校验,主库不开。重启备库sql线程后,备库sql线程停止Last_Error显示:Relay log read failure: Could not parse relay log event entry. The possible reasons are: the master's binary log is corrupted(you can check this by running 'mysqlbinlog' on the binary log), the slave's relay log is corrupted (you can check this by running 'mysqlbinlog' on the relay log), a network problem, or a bug in the master's or slave's MySQL code. If you want to check the master's binary log or slave's relay log, you will be able to know their names by issuing 'SHOW SLAVE STATUS' on this slave.

  从错误信息可以看出,可能是主库的binlog或备库的relaylog出错。


关于GTIDs

  详见上一章节:MySQL· 限制改进·GTID和升级


binlog头部信息

  FORMAT_DESCRIPTION:binlog格式信息,备库解析binlog的标准。

  PREVIOUS_GTIDS_LOG:已产生的GTID集合,防止重复记录binlog。

  ROTATE:备库binlog切换到主库binlog的转换标志。


PREVIOUS_GTIDS_LOG

  开启GTID_MODE时,每个binlog文件的头部会有一个PREVIOUS_GTIDS_LOG,用于保存已产生的GTID。MySQL源码中的Gtid_set类用于实现这个功能,内部由链表实现,链表的每个节点保存了一个区间,用于指代一段连续的GNO。


分析和修复

  在上述环境下,备库relay log的前几条应该是:

 

  之前备库选取FORMAT 的策略是:先根据文件头备库的FORMAT_DESCRIPTION_EVENT确定FORMAT,然后继续向下读;

  如果读到FORMAT_DESCRIPTION_EVENT,则更新FORMAT;如果读到ROTATE_EVENT,则继续向下读;

  如果读到一条非FORMAT_DESCRIPTION_EVENT或ROTATE_EVENT的log,则停止更新FORMAT,选取当前FORMAT解析后面的log。

  由备库前几条relay log可知,读到第二条PREVIOUS_GTIDS_LOG_EVENT时,已由备库的FORMAT_DESCRIPTION_EVENT确定FORMAT(binlog_checksum=on),而略过主库的FORMAT_DESCRIPTION_EVENT。

  到下面解析log时,会认为每条log尾部有crc校验信息。但校验信息实际是不存在的,所以会报crc校验的错误。

  当读到PREVIOUS_GTIDS_LOG_EVENT时继续向下读,即可读到主库的FORMAT_DESCRIPTION_EVENT,解决这个bug。


其他复现场景

  5.5/5.1会作为5.6的主库,此时备库开启GTID-MODE和crc校验。若中间出现主键冲突等错误,sql thread暂停后, 执行start slave,会报错 "Event crc check failed"。原因是5.5/5.1不支持crc校验,和5.6不开启crc校验相似。


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
3月前
|
SQL 关系型数据库 MySQL
【揭秘】MySQL binlog日志与GTID:如何让数据库备份恢复变得轻松简单?
【8月更文挑战第22天】MySQL的binlog日志记录数据变更,用于恢复、复制和点恢复;GTID为每笔事务分配唯一ID,简化复制和恢复流程。开启binlog和GTID后,可通过`mysqldump`进行逻辑备份,包含binlog位置信息,或用`xtrabackup`做物理备份。恢复时,使用`mysql`命令执行备份文件,或通过`innobackupex`恢复物理备份。GTID模式下的主从复制配置更简便。
396 2
|
5月前
|
Prometheus 监控 关系型数据库
数据库同步革命:MySQL GTID模式下主从配置的全面解析
数据库同步革命:MySQL GTID模式下主从配置的全面解析
642 0
|
6月前
|
SQL 存储 关系型数据库
Mysql内核查询成本计算
Mysql内核查询成本计算
|
安全 关系型数据库 MySQL
MySQL的binlog日志和GTID
MySQL的binlog日志和GTID
220 1
|
监控 关系型数据库 MySQL
银河麒麟V10 SP3 X86 二进制文件部署 mysql-5.7.29 GTID 半同步复制的双主架构
银河麒麟V10 SP3 X86 二进制文件部署 mysql-5.7.29 GTID 半同步复制的双主架构
443 1
|
6月前
|
存储 Cloud Native 关系型数据库
云原生|kubernetes|部署MySQL一主多从复制集群(基于GTID的复制)
云原生|kubernetes|部署MySQL一主多从复制集群(基于GTID的复制)
111 0
|
关系型数据库 MySQL
MySQL 5.7 基于GTID主从复制+并行复制+半同步复制
MySQL 5.7 基于GTID主从复制+并行复制+半同步复制
161 0
|
12天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
26 1
|
15天前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
29 4
|
21天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
105 1

相关产品

  • 云数据库 RDS MySQL 版
  • 下一篇
    无影云桌面