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

简介:

现象描述

  在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 
目录
相关文章
|
SQL 运维 关系型数据库
深入探讨MySQL的二进制日志(binlog)选项
总结而言,对MySQL binlogs深度理解并妥善配置对数据库运维管理至关重要;它不仅关系到系统性能优化也是实现高可靠性架构设计必须考虑因素之一。通过精心规划与周密部署可以使得该机能充分发挥作用而避免潜在风险带来影响。
438 6
|
存储 SQL 关系型数据库
MySQL中binlog、redolog与undolog的不同之处解析
每个都扮演回答回溯与错误修正机构角色: BinLog像历史记载员详细记载每件大大小小事件; RedoLog则像紧急救援队伍遇见突發情況追踪最后活动轨迹尽力补救; UndoLog就类似时间机器可倒带历史让一切归位原始样貌同时兼具平行宇宙观察能让多人同时看见各自期望看见历程而互不干扰.
702 9
|
存储 SQL 关系型数据库
MySQL的Redo Log与Binlog机制对照分析
通过合理的配置和细致的管理,这两种日志机制相互配合,能够有效地提升MySQL数据库的可靠性和稳定性。
493 10
|
SQL 监控 关系型数据库
MySQL日志分析:binlog、redolog、undolog三大日志的深度探讨。
数据库管理其实和写小说一样,需要规划,需要修订,也需要有能力回滚。理解这些日志的作用与优化,就像把握写作工具的使用与运用,为我们的数据库保驾护航。
1139 23
|
存储 SQL 关系型数据库
mysql 的ReLog和BinLog区别
MySQL中的重做日志和二进制日志是确保数据库稳定性和可靠性的关键组件。重做日志主要用于事务的持久性和原子性,通过记录数据页的物理修改信息来恢复未提交的事务;而二进制日志记录SQL语句的逻辑变化,支持数据复制、恢复和审计。两者在写入时机、存储方式及配置参数等方面存在显著差异。
496 6
|
canal 消息中间件 关系型数据库
Canal作为一款高效、可靠的数据同步工具,凭借其基于MySQL binlog的增量同步机制,在数据同步领域展现了强大的应用价值
【9月更文挑战第1天】Canal作为一款高效、可靠的数据同步工具,凭借其基于MySQL binlog的增量同步机制,在数据同步领域展现了强大的应用价值
2586 4
|
SQL 关系型数据库 MySQL
【揭秘】MySQL binlog日志与GTID:如何让数据库备份恢复变得轻松简单?
【8月更文挑战第22天】MySQL的binlog日志记录数据变更,用于恢复、复制和点恢复;GTID为每笔事务分配唯一ID,简化复制和恢复流程。开启binlog和GTID后,可通过`mysqldump`进行逻辑备份,包含binlog位置信息,或用`xtrabackup`做物理备份。恢复时,使用`mysql`命令执行备份文件,或通过`innobackupex`恢复物理备份。GTID模式下的主从复制配置更简便。
2286 2
|
SQL 关系型数据库 MySQL
【MySQL】根据binlog日志获取回滚sql的一个开发思路
【MySQL】根据binlog日志获取回滚sql的一个开发思路

热门文章

最新文章

相关产品

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

    更多