近一个月处理历史数据问题时,居然连续遇到了2个MySQL BUG,分享给大家一下,也欢迎指正是否有问题。

BUG1:

数据库版本:  MySQL5.7.25 - 28

操作系统: Centos 7.7(不重要)

数据库架构: 主-从-级联从

数据库参数:

innodb_support_xa = 1   # 因主库存在XA事务,因此设置支持xa事务
replicate_wild_do_table=yy.% # 只同步其中一个库

异常场景:级联从库上同步从库中的其中一个库(或者部分表,即存在过滤筛选部分表的场景),其中主库中其他库(非需要的库)存在XA事务,此时级联从库上启动主从同步时出现以下错误

 [ERROR] Slave SQL for channel 'yy': Worker 1 failed executing transaction 'ANONYMOUS' at master log , end_log_pos 120460779;
The use of replication filters with XA transactions is not supported, and can lead to an undefined state in the replication slave.
Error_code: 3227

官方文档解答

查找官方文档,有记录对应问题

https://forums.mysql.com/read.php?3,667908,667908

该问题已在MySQL8.0中修复,对应的MySQL8.0中的内容可以参考此链接

https://dev.mysql.com/doc/refman/8.0/en/xa.html

临时解决办法

  • 方式一: 将本架构中的其中一个从库设置binlog过滤,只记录所需库的binlog,再开启级联从库的同步即可。
  • 方式二:使用ogg或canal等第三方工具处理同步
  • 方式三:写同步脚本定时同步

BUG2:

数据库版本:  MySQL5.6.27-75,MySQL5.7.25-28(从MySQL5.6.27-75原地升级的)

数据库架构: 主-从

异常场景

将一张大表转移到备份库中,使用rename的方式出现异常

SQL>  alter table tbname rename  to bak_db.tbname;

错误信息如下:

2020-06-21T03:10:54.694718Z 200 [ERROR] InnoDB: Operating system error number 2 in a file operation.
2020-06-21T03:10:54.694737Z 200 [ERROR] InnoDB: The error means the system cannot find the path specified.
2020-06-21T03:10:54.694742Z 200 [ERROR] InnoDB: File ./testdb/tbname.ibd: 'rename' returned OS error 71.

在MySQL5.6.27 -75及其从库MySQL5.7.25-28的版本中均出现

官方文档解答:

经查,官方文档中有对应的bug记录

  • https://bugs.mysql.com/bug.php?id=74004
  • https://bugs.mysql.com/bug.php?id=86253

解决办法

  • 方式三:如果是非静态表,则可以考虑手动再目标库创建新表,在原表上添加增删改的触发器(类似上文中的pt-osc变更表的处理方法)。

该BUG已修复,其他版本中已解决,但是通过实践发现,原地升级的方式仍未解决,大家可以亲自实践验证一下。

分享2个近期遇到的MySQL数据库的BUG案例的更多相关文章

  1. MySQL 数据库增量数据恢复案例

    MySQL 数据库增量数据恢复案例 一.场景概述 MySQL数据库每日零点自动全备 某天上午10点,小明莫名其妙地drop了一个数据库 我们需要通过全备的数据文件,以及增量的binlog文件进行数据恢 ...

  2. 170301、使用Spring AOP实现MySQL数据库读写分离案例分析

    使用Spring AOP实现MySQL数据库读写分离案例分析 原创 2016-12-29 徐刘根 Java后端技术 一.前言 分布式环境下数据库的读写分离策略是解决数据库读写性能瓶颈的一个关键解决方案 ...

  3. Powser Design 16.5 导入Mysql数据库的bug

    在Power Designer 16.5中,想导入mysql的某个数据库,选择导入后会导入全部数据库. 解决方案: 打开powerdesigner.选择file--->reverse engin ...

  4. MySQL Innodb数据库误删ibdata1后MySQL数据库的恢复案例

      上周,以前公司的同事朋友找我帮忙,看看能否帮忙恢复一个MySQL 数据库,具体情况为:数据库版本为MySQL 5.6(具体版本不清楚),也不清楚具体的数据库引擎; 没有数据库备份,只剩下数据库下面 ...

  5. 161220、使用Spring AOP实现MySQL数据库读写分离案例分析

    一.前言 分布式环境下数据库的读写分离策略是解决数据库读写性能瓶颈的一个关键解决方案,更是最大限度了提高了应用中读取 (Read)数据的速度和并发量. 在进行数据库读写分离的时候,我们首先要进行数据库 ...

  6. 使用Spring AOP实现MySQL数据库读写分离案例分析

    一.前言 分布式环境下数据库的读写分离策略是解决数据库读写性能瓶颈的一个关键解决方案,更是最大限度了提高了应用中读取 (Read)数据的速度和并发量. 在进行数据库读写分离的时候,我们首先要进行数据库 ...

  7. Python 操作mysql数据库之 SQLAlchemy 案例详解

      前言: 字段声明类型中,最右边的是数据库中对应的字段,我们依然可以使用,其左边的的 SQLAchemy 则是其自身封装的自定义类型. 本篇不会讲太多的理论知识,因为这个实用性更强,所以通篇全部都是 ...

  8. DBA必备:MySQL数据库常用操作和技巧

    DBA必备:MySQL数据库常用操作和技巧 2011-02-25 15:31 kaduo it168 字号:T | T MySQL数据库可以说是DBA们最常见和常用的数据库之一,为了方便大家使用,老M ...

  9. MySQL数据库常用操作和技巧

    MySQL数据库可以说是DBA们最常见和常用的数据库之一,MySQL的广泛应用,也使更多的人加入到学习它的行列之中.下面是老MySQL DBA总结的MySQL数据库最常见和最常使用的一些经验和技巧,分 ...

随机推荐

  1. 一键部署open***服务

    一键部署超级简单易用的openvpn服务器,支持多证书+多账号[密码]认证 一. 服务器端部署 项目地址:https://github.com/guoew/openvpn-install 1.1. 下 ...

  2. 8.Hash集合类型操作使用

    数据类型Hash (1)介绍 hash数据类型存储的数据与mysql数据库中存储的一条记录极为相似 Redis本身就类似于Hash的存储结构,分为key-value键值对,实际上它的Hash数据就好像 ...

  3. Ant 的最完整build.xml(转)

    Ant的概念 Make命令是一个项目管理工具,而Ant所实现功能与此类似.像make,gnumake和nmake这些编译工具都有一定的缺陷,但是Ant却克服了这些工具的缺陷.最初Ant开发者在开发跨平 ...

  4. Linux系统部署JavaWeb项目(超详细tomcat,nginx,mysql)

    转载自:Linux系统部署JavaWeb项目(超详细tomcat,nginx,mysql) 我的系统是阿里云的,香港的系统,本人选择的是系统镜像:CentOS 7.3 64位. 具体步骤: 配置Jav ...

  5. [Python基础]002.语法(1)

    语法(1) 变量 基本数据类型 空值 布尔值 数字 字符串 列表 元组 字典 结构嵌套 变量 定义变量 i = 10 这样就定义了一个名为 i 的变量,它的值是 10 . 变量名必须是大小写英文.数字 ...

  6. bootstrap table 横向滚动条

    <table id="AlarmTable" style="overflow:scroll;"/> {title: '名称', field: 'na ...

  7. chrome和Firefox浏览器渲染页面的不同

    一直很好奇chrome和firefox这两大浏览器的页面渲染有什么不同,今天自己写了些html代码来做了下检验. 先做html编码,代码如下: <!DOCTYPE html><htm ...

  8. (Java实现) 洛谷 P1071 潜伏者

    题目描述 R国和 S国正陷入战火之中,双方都互派间谍,潜入对方内部,伺机行动.历尽艰险后,潜伏于 S国的 R 国间谍小 C终于摸清了 S 国军用密码的编码规则: 1. S 国军方内部欲发送的原信息经过 ...

  9. Java实现 LeetCode 605 种花问题(边界问题)

    605. 种花问题 假设你有一个很长的花坛,一部分地块种植了花,另一部分却没有.可是,花卉不能种植在相邻的地块上,它们会争夺水源,两者都会死去. 给定一个花坛(表示为一个数组包含0和1,其中0表示没种 ...

  10. Java中构造方法的详细介绍

    构造方法是一个特殊的方法 它会在实例化对象时自动调用 构造方法的定义 必须同时满足下面的三个条件 方法名与类名相同 方法名前面没有返回值类型的声明 在方法中不能使用return语句返回值 class ...