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

本文涉及的产品
PolarDB Agent Express,2核4GB
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
云数据库 PolarDB MySQL 版,列存表分析加速 4核8GB
简介:

现象描述

  在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校验相似。


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
Mybatis+mysql动态分页查询数据案例——测试类HouseDaoMybatisImplTest)
Mybatis+mysql动态分页查询数据案例——测试类HouseDaoMybatisImplTest)
Mybatis+mysql动态分页查询数据案例——房屋信息的实现类(HouseDaoMybatisImpl)
Mybatis+mysql动态分页查询数据案例——房屋信息的实现类(HouseDaoMybatisImpl)
|
SQL 关系型数据库 MySQL
【揭秘】MySQL binlog日志与GTID:如何让数据库备份恢复变得轻松简单?
【8月更文挑战第22天】MySQL的binlog日志记录数据变更,用于恢复、复制和点恢复;GTID为每笔事务分配唯一ID,简化复制和恢复流程。开启binlog和GTID后,可通过`mysqldump`进行逻辑备份,包含binlog位置信息,或用`xtrabackup`做物理备份。恢复时,使用`mysql`命令执行备份文件,或通过`innobackupex`恢复物理备份。GTID模式下的主从复制配置更简便。
1984 2
Mybatis+mysql动态分页查询数据案例——工具类(MybatisUtil.java)
Mybatis+mysql动态分页查询数据案例——工具类(MybatisUtil.java)
|
关系型数据库 MySQL Serverless
实时计算 Flink版产品使用问题之使用cdas语法同步mysql数据到sr serverless是否支持动态加表
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
SQL 存储 关系型数据库
17. Mysql 动态SQL
17. Mysql 动态SQL
603 1
|
SQL 关系型数据库 MySQL
实时计算 Flink版产品使用问题之如何进行MySQL到MySQL的动态同步
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
关系型数据库 MySQL
mysql动态查列(case when then else end)
mysql动态查列(case when then else end)
215 0
|
Java 数据库连接 mybatis
Mybatis+mysql动态分页查询数据案例——Mybatis的配置文件(mybatis-config.xml)
Mybatis+mysql动态分页查询数据案例——Mybatis的配置文件(mybatis-config.xml)

相关产品

  • 云数据库 RDS MySQL 版
  • 推荐镜像

    更多