写点什么

Galera MySQL 5.7.17 bug 修复

  • 2019-09-15
  • 本文字数:923 字

    阅读完需:约 3 分钟

Galera MySQL 5.7.17 bug修复

Galera MySQL 5.7.17 由于设置 innodb_undo_table_spaces 大于 0 导致使用 RSYNC 进行全量数据同步失败的原因及解决办法

Part.1

一 问题现场

将一个初始化过(执行过–initialize)的节点添加到 Galera MySQL 集群中时:数据同步完成后,Innodb 使用 undo log 中的记录回滚未提交的事务时会触发下面的 ERROR:




ERROR 说 Innodb 访问了一个 undo log 表空间之外的数据页。

二 问题猜测

在 Galera MySQL 中,向正在运行的集群中添加一个节点时会触发全量数据同步——SST。SST 会选择一个 donor,并将这个 donor 的整个数据目录中的内容同步给新添加的节点。


照此,如果新添加的节点上的数据是 donor 节点的一份一模一样的拷贝的话,那 undo log 也会是 donor 节点正在使用的 undo log,理论上也就不会出现任何问题。


所以怀疑是在进行 SST 的时候出了问题,没能正常同步 undo log。

三 验证猜测

删除没能正常同步数据的节点数据文件夹夹内的所有文件(恢复到–initialize 之前的状态)并启动 MySQL,将这个节点添加到集群中,发现数据文件夹内并没有 undo log:



于是产生上面 ERROR 的原因可以确定为是执行 SST 时没能正常同步 undo log table space。

Part.2

问题解决

出现问题的 Galera MySQL 集群使用 rsync 作为 SST 同步数据的方法;在使用 rsync 同步数据时默认会使用【/usr/bin/wsrep_sst_rsync】程序。


改程序在调用 rsync 传输数据之前会为 rsync 设置如下的文件过滤规则:



可以看出文件过滤规则中虽然指定了 innodb 的系统表空间 iddata,但是却没有添加 undo log 表空间的文件——以 undo 开头的文件:



在 MySQL 5.7 之后的版本,为了避免大的事务造成系统表空间变的过大,将配置【innodb_undo_table_spaces】设置为大于 0 的值时,Innodb 使用独立于系统表空间之外的文件存储 undo log;但是 Galera MySQL 的【wsrep_sst_rsync】却没有考虑到这一点,导致进行数据同步时,没能正确同步独立的 undo log 表空间。


于是在 wsrep_sst_rsync 程序中设置文件过滤的行中进行如下修改:


之后就可以成功添加节点了。

Part.3

问题跟进

目前这个问题已经提交给了 Galera MySQL,并且已经被官方修复。



本文转载自公众号滴滴技术(ID:didi_tech)。


原文链接:


https://mp.weixin.qq.com/s/wKdU7GskIIFRVDGOXKry-Q


2019-09-15 23:18843

评论

发布
暂无评论
发现更多内容

数据迁移工具应具备的新式延迟诊断功能

爱可生开源社区

数据迁移 MySQL、 #OceanBase

亚信安慧AntDB数据库分布式集群在线升级

亚信AntDB数据库

AntDB

拿起智能体的金箍棒,化身AI天命人

脑极体

AI

人工智能图像编辑软件Topaz Gigapixel AI for Mac

Mac相关知识分享

人工智能 图像编辑

JavaScript 开发工具WebStorm 2024 for Mac激活版

Mac相关知识分享

Mac 软件 集成开发环境

TiDB DR-Auto-Sync 同城双中心高可用实践丨银行核心背后的落地工程体系

TiDB 社区干货传送门

论被动元数据的弊端,以及主动元数据的技术优势

Aloudata

元数据 数据管理 全链路数据血缘 数据血缘

在数小时内构建 CRM:你需要了解的顶级无代码/低代码工具

NocoBase

低代码 CRM 无代码

开源活动预告|抖音集团专家聚焦电商、PB 级实时场景带来数据技术分享

字节跳动开源

MySQL Undo 工作机制历史演变

爱可生开源社区

MySQL innodb 事务 Undo

JeecgBoot应用Spring Authorization Server

JEECG低代码

Spring Boot 中的 “依赖管理和自动配置” 详解透彻到底(附+详细代码流程)

EquatorCoco

Java spring 后端

音乐创作软件Ableton Live 11 Suite for Mac

Mac相关知识分享

Mac软件

从 Oracle 到 TiDB 丨数据库资源评估指南

TiDB 社区干货传送门

迁移

华为大咖说丨企业数字化转型如何开展顶层设计?

华为云PaaS服务小智

华为云 企业数字化

Java ORM 框架指南

FunTester

强大的项目管理软件OmniPlan pro for Mac

Mac相关知识分享

项目管理软件 Mac软件

永续合约快进快出套利策略

Silently9527

比特币 量化交易

2024年你应该使用的6个JavaScript库

伤感汤姆布利柏

【案例分享】如何利用京东云建设高可用业务架构

京东科技开发者

Python IDE 编程工具JetBrains pycharm pro 2024 for mac激活版

Mac相关知识分享

编程 开发 Mac软件

效率跃升16倍!火山引擎ByteHouse助力销售数据平台复杂查询效率大幅提高

Geek_2d6073

MySQL 索引合并优化实践

爱可生开源社区

MySQL 索引

“人手一个贾维斯”的愿望,正在被“视频通话”功能带进现实

Alter

TiDB 究竟抖还是不抖?

TiDB 社区干货传送门

版本升级

9个JavaScript库,让你早下班2小时

秃头小帅oi

Endpoint Central终端管理软件适合什么样的IT用户?

Geek_a83400

数据资产新视角 要素化与资产化的双轮驱动

郑州埃文科技

数据治理 数字经济 数据要素

「激荡五十年」艰难起步的八十年代

不惑

数据库 历史 科技简史 发展趋势 前世今生

我们写的代码是如何被用户看到的——前端篇

阿里技术

前端

一个比 Nginx 还简单的 Web 服务器

江南一点雨

Galera MySQL 5.7.17 bug修复_数据库_赵博文_InfoQ精选文章