报名参加CloudWeGo黑客松,奖金直推双丰收! 了解详情
写点什么

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:18885

评论

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

55 K8S之Prometheus监控步骤

穿过生命散发芬芳

k8s 28天写作 12月日更

如何设置Fiddler来拦截Java代码发送的HTTP请求,进行各种问题排查

汪子熙

HTTP fiddler 28天写作 网络抓包 12月日更

一文搞懂ReentrantLock的公平锁和非公平锁

Ayue、

ReentrantLock 公平锁 非公平锁

疫情下的圣诞节

张老蔫

28天写作

第三周作业

lv

Velocity.js:一个简单易用、高性能、功能丰富的轻量级JS动画库

devpoint

Vue3 vuex 12月日更 Velocity.js

谨防做 Yes Man

搬砖的周狮傅

管理 思考

使用 RED 方法分析服务的瓶颈

耳东@Erdong

28天写作 12月日更 RED 方法

模块八-设计消息队列存储消息数据的 MySQL 表格

deng

架构实战营

元宇宙100讲-0x008

hackstoic

元宇宙

微服务架构 | 怎样解决超大附件分片上传?

李尚智

微服务架构 springboot 断点续传 SpringCloud 大文件断点续传

语音信号数字化

轻口味

28天写作 12月日更

收藏GitHub上的7个热门TypeScript项目

devpoint

typescript Grafana Storybook 12月日更

通过ip查询域名信息

喀拉峻

网络安全 渗透测试·

面试高频考点:hashCode与equals

xcbeyond

Java equals vs hashcode 28天写作 12月日更

2021年终总结:30多岁依然没有放弃自我成长!

王磊

架构训练营 week3 学习总结

红莲疾风

「架构实战营」

所谓默契,最不靠谱(25/28)

赵新龙

28天写作

模块三作业-学生管理系统架构文档

曾竞超

架构实战营 「架构实战营」

PassJava 开源 (七) :Spring Cloud 整合 OpenFeign 实现声明式远程调用

悟空聊架构

28天写作 passjava 悟空聊架构 12月日更 openfeign

Linux 命令 man 全知全会

hedzr

Linux less man man-pages

性能基础之理解Linux系统平均负载和CPU使用率

zuozewei

Linux 性能测试 计算机原理 12月日更

VUE 3.0 源码 rollup.config.js 对不同类型输出文件的注释

老罗

VUE 3.0 源码解析

再论学习

将军-技术演讲力教练

🍃【Spring专题】「开发实战」Spring Security与JWT实现权限管控以及登录认证指南

码界西柚

spring spring security springsecurity 12月日更

华为技术专家深度解析Redis惰性删除原理

JavaEdge

12月日更

元宇宙100讲-0x009

hackstoic

元宇宙

.NET6新东西--PriorityQueue

喵叔

28天写作 12月日更

Golang中不一样的switch用法

liuzhen007

28天写作 12月日更

24《重学JAVA》--多线程(一)

杨鹏Geek

Java25周年 28天写作 12月日更

Gin-Vue-Admin 使用 gin+vue 进行极速开发的全栈开发基础平台【gva 第二节】

坚果

28天写作 Vue 3 Go 语言 12月日更

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