网易首页 > 网易号 > 正文 申请入驻

技术分享 | MySQL 同一事务中更新innodb和 myisam表时应怎么办?

0
分享至

作者:刘开洋
爱可生交付服务团队北京 DBA,对数据库及周边技术有浓厚的学习兴趣,喜欢看书,追求技术。
本文来源:原创投稿
*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。
问题

同事在客户那里解决问题时发现一个报错,出于兴趣就进行了研究:

Statement violates GTID consistency: Updates to non-transactional tables can only be done in either autocommitted statements or single-statement transactions,and never in the same statement as updates to transactional tables.

报错的意思是指业务端下发的事务违反了 GTID 的一致性。

原因是,非事务表和事务表在一条事务里进行了更新,MySQL 是不允许我们这么做的,但业务非要胳膊掰大腿,怎么办?

官方说明:

Only statements that can be logged using GTID safe statements can be logged when enforce_gtid_consistency is set to ON,so the operations listed here cannot be used with this option:

  • • Transactions or statements that update both transactional and nontransactional tables.

跟客户沟通确定了该报错事务涉及到的两张表分别是 innodb 表和 myisam 表。我们在自己环境上复现一下。

复现

使用 mysql 5.7.25,开启 gtid,

并分别创建一张 innodb 表和 myisam 表。

在同一个事务中对两张表进行更新:

没有报错呀,怎么和客户那里的报错解释不符?

我们将两张表的提交顺序换一下呢?

果然复现了客户环境中的报错。可是为什么先更新 myisam 引擎表可以更新 innodb 引擎表,但是反之则不行呢?

因为 myisam 引擎表不支持事务,在我们下发 begin 之后,就已经隐式提交了,这是个运维经验,无法直接判断,专门请教了行业大牛得到了确认;

而继续更新 myisam 表时,MySQL 不认这个 insert myisam 表的操作是一个事务操作,只是给予一个记录 binlog 位置的 gtid,之后再更新 innodb 表的操作时,mysql 就认定这是在更新一条事务,在 commit 中就将这条事务提交了。

解决

解决办法有三种:

  1. 1. 在业务层面修改事务逻辑,将对 myisam 表和 innodb 表的更新语句拆分到不同事务中。

  2. 2. 将 myisam 存储引擎改为 innodb 存储引擎。

  3. 3. 关闭事务一致性参数 ENFORCE_GTID_CONSISTENCY。

接下来分别对三种解决方案进行验证:

1)修改业务逻辑,将 myisam 表的更新语句单独放在一个事务里执行。

这是最为稳妥的一个方法。

2)修改 myisam 表的存储引擎为 innodb

  1. 1. 首先确认如果数据量比较大,可以使用 mysqldump 导出数据,然后修改 SQL 文件中的存储引擎的类型和表名,删掉 drop table 的操作,之后保存 SQL 文件导入到数据库中。

  2. 2. percona 公司也有一款工具适用于这样的场景,有兴趣的同学可以研究使用下,以备生产环境的使用:pt-online-schema-change。

  3. 3. 如果表数据量很小,就可以使用常规的 alter 语句直接修改:alert table sanguo engine = InnoDB。

注意:
myisam 存储引擎表不支持事务,innodb 表相对于 myisam 表来说能支持更多的数据库高级操作,例如:事务、外键。随着 MySQL 版本的不断更新迭代,innodb 的优势越来越大,建议将所有 MySQL 表的存储引擎逐渐替换为 innodb,两种存储引擎其他方面的优劣对比参考网上文档。

3)关闭事务一致性参数 ENFORCE_GTID_CONSISTENCY

OFF_PERMISSIVE: New transactions are anonymous. Replicated transactions can be either anonymous or GTID transactions.

  • • 匿名事务依赖于二进制日志文件和位置来识别特定的事务。

  • • 从 MySQL 5.7.6 开始,添加的 OFF_PERMISSIVE 和 ON_PERMISSIVE 模式允许在拓扑中混合使用这些事务类型。

对表的更新操作完成。

我们去看看此时 binlog 中的写入:

关闭 ENFORCE_GTID_CONSISTENCY 参数后新事务的提交都是匿名的,且提交顺序被打乱,数据库不再进行一致性检查;但此时复制会中断,数据库使用的 HA 将失效。权衡利弊,对于业务来说代价较高,不建议使用。

附:
如果在一个生产环境中,不建议同时更新 innodb 和 myisam 存储引擎表,对于 myisam 引擎表的更改是无法进行回滚的,建议业务将 SQL 上线前一定做好检查。

参考

https://dev.mysql.com/doc/refman/5.7/en/replication-options-gtids.html
https://www.percona.com/doc/percona-toolkit/LATEST/pt-online-schema-change.html

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
肉色丝袜运动鞋,袜尖透明~

肉色丝袜运动鞋,袜尖透明~

白宸侃片
2024-05-23 16:45:07
三次台海军演,从半包围到全包围只要一个战区就能搞定

三次台海军演,从半包围到全包围只要一个战区就能搞定

三叔的装备空间
2024-05-23 15:27:11
女生爬武功山疑似“冻死”,小白相信小红书,穿吊带遇到山雨

女生爬武功山疑似“冻死”,小白相信小红书,穿吊带遇到山雨

影孖看世界
2024-05-21 20:29:46
庆余年2:影子真实身份曝光,竟是范闲最信任的滕子京

庆余年2:影子真实身份曝光,竟是范闲最信任的滕子京

娱乐多谋
2024-05-18 21:10:35
6小时卖出10亿元,16GB+1TB+IP68防水,如今售价突降926元

6小时卖出10亿元,16GB+1TB+IP68防水,如今售价突降926元

科技阿维
2024-05-23 20:21:49
体坛:苏宁在投资国米的项目上亏掉了超过7亿欧元

体坛:苏宁在投资国米的项目上亏掉了超过7亿欧元

懂球帝
2024-05-23 09:18:10
258公里中国最长“地铁”要来了:时速200公里横跨5城,从广州到惠州只需1小时

258公里中国最长“地铁”要来了:时速200公里横跨5城,从广州到惠州只需1小时

极目新闻
2024-05-23 16:26:33
4月份SUV销量出炉, 特斯拉Model Y夺冠, 比亚迪和丰田各三款入围

4月份SUV销量出炉, 特斯拉Model Y夺冠, 比亚迪和丰田各三款入围

萌系谈科技
2024-05-21 04:56:47
与凤行庆功宴闹幺蛾子!赵丽颖与林更新合体,衣服印狗头被嘲倒贴

与凤行庆功宴闹幺蛾子!赵丽颖与林更新合体,衣服印狗头被嘲倒贴

叶二娱评
2024-05-22 13:34:31
日本罗森宣布将于7月24日退市

日本罗森宣布将于7月24日退市

观点机构
2024-05-23 15:11:10
量化砸盘,A股大跌,发生了什么?别被吓到,或许是低吸好机会?

量化砸盘,A股大跌,发生了什么?别被吓到,或许是低吸好机会?

云姐闲聊
2024-05-23 14:21:33
海花岛情况持续恶化,地库已拉警戒线:投资者要哭晕在厕所了

海花岛情况持续恶化,地库已拉警戒线:投资者要哭晕在厕所了

大道微言
2024-05-21 00:03:21
全球芯片战开始?5月19日正式宣布,对美实行制裁,不再留手!

全球芯片战开始?5月19日正式宣布,对美实行制裁,不再留手!

田间农人阿馋
2024-05-23 22:29:58
赖清德上台,第一枪瞄准韩国瑜,三大组织表态,大陆对赖改了称呼

赖清德上台,第一枪瞄准韩国瑜,三大组织表态,大陆对赖改了称呼

美食阿鳕
2024-05-22 14:35:22
巡视组进驻后,因“工作安排”原因申请辞职的许安,被查了

巡视组进驻后,因“工作安排”原因申请辞职的许安,被查了

政知新媒体
2024-05-22 19:38:57
台湾啤酒无法输入大陆,民进党王定宇扬言报复要封禁大陆燕京啤酒

台湾啤酒无法输入大陆,民进党王定宇扬言报复要封禁大陆燕京啤酒

眼镜看社会
2024-05-23 14:11:52
对比2024年和2004年的一阵,NBA确实退步了!

对比2024年和2004年的一阵,NBA确实退步了!

篮坛扒客
2024-05-23 15:08:35
CCTV5直播!中国女排迎战世界第11,朱婷正式复出,蔡斌带队复仇

CCTV5直播!中国女排迎战世界第11,朱婷正式复出,蔡斌带队复仇

室内设计师阿喇
2024-05-23 22:37:44
江苏一儿媳出轨,公公带儿子抓人,进门后儿子傻眼:怎么是你

江苏一儿媳出轨,公公带儿子抓人,进门后儿子傻眼:怎么是你

纪实录
2024-05-22 20:06:22
50条生理常识,比黄金还值钱!

50条生理常识,比黄金还值钱!

大禹小城
2024-05-21 21:23:18
2024-05-24 03:12:49
爱可生云数据库
爱可生云数据库
企业数据处理技术整体解决方案
411文章数 20关注度
往期回顾 全部

科技要闻

黄仁勋业绩会万字实录:我们的压力太大了

头条要闻

奥迪车主称每次启动车辆就会显示"续费弹窗" 客服回应

头条要闻

奥迪车主称每次启动车辆就会显示"续费弹窗" 客服回应

体育要闻

欧文,三十二而立

娱乐要闻

大S儿子被学校退学,张兰称孙子没人管

财经要闻

九鼎金租减值罗生门:郑州银行藏雷?

汽车要闻

上汽大通大家7超混/大家9超混将于6月7日正式上市

态度原创

艺术
家居
数码
时尚
游戏

艺术要闻

穿越时空的艺术:《马可·波罗》AI沉浸影片探索人类文明

家居要闻

光阴流年 摇曳爱恋

数码要闻

讯景推出凤凰涅槃系列 RX 7800 XT 彩色显卡,售价4099元

抗老靠基因?快50岁的舒淇连头发丝都在发光

无畏契约:凰鸣四海就在今日!FPX2-1战胜FUT拿下国际赛首胜

无障碍浏览 进入关怀版