MySQL 迁移完不能快速导数据了?
关于 5.6 升级到 5.7 之后,GTID 的相关功能的注意事项。
作者:秦福朗,爱可生 DBA 团队成员,负责项目日常问题处理及公司平台问题排查。热爱互联网,会摄影、懂厨艺,不会厨艺的 DBA 不是好司机,didi~
爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。
本文共 400 字,预计阅读需要 2 分钟。
背景
某金融公司有套系统最近刚迁移完,从 5.6 迁移到 5.7.30,并且在迁移前未开启 GTID,迁移后开启了 GTID 相关功能。业务按照以往的方式使用 CREATE TABLE ... SELECT ...
导数据的时候出现报错:Error Code:1786 (HY000): Mysql Statement violates GTID consistency: CREATE TABLE ... SELECT
。
问题原理
这个问题比较简单,原因就是迁移后的 MySQL5.7 使用了 GTID,开启了 enforce_gtid_consistency
参数(GTID 强一致性)。
为保证分布式事务的一致性,MySQL 使用 GTID 来唯一标识一个事务。在 GTID 模式下,DDL 和 DML 语句会自动产生不同的 GTID 来标识不同的事务操作。但是 CREATE TABLE ... SELECT ...
只生成了一个 GTID,将 DDL 和 DML 操作合并为一个事务执行,这在语句执行失败时,会造成主从数据不一致。开启 enforce_gtid_consistency
参数就是为了 GTID 事务的原子性。
官方文档也有对 CREATE TABLE ... SELECT ...
这一操作的说明:
解决方案
为了安全,不建议关闭这个参数。
在 MySQL5.7 上可以用拆分成两句 SQL 的方式,解决这个问题,比如:
#先创建表 CREATE TABLE ... LIKE... #再插入数据 INSERT INTO ... SELECT ...
虽然之前的单条 SQL 能简单快速的导数到另一张表,但为了安全可以适当麻烦一点。
MySQL 8.0
好消息是从 MySQL8.0.21 开始,支持原子 DDL 的存储引擎允许使用 CREATE TABLE ... SELECT ...
语句了。
背景
某金融公司有套系统最近刚迁移完,从 5.6 迁移到 5.7.30,并且在迁移前未开启 GTID,迁移后开启了 GTID 相关功能。业务按照以往的方式使用 CREATE TABLE ... SELECT ...
导数据的时候出现报错:Error Code:1786 (HY000): Mysql Statement violates GTID consistency: CREATE TABLE ... SELECT
。
问题原理
这个问题比较简单,原因就是迁移后的 MySQL5.7 使用了 GTID,开启了 enforce_gtid_consistency
参数(GTID 强一致性)。
为保证分布式事务的一致性,MySQL 使用 GTID 来唯一标识一个事务。在 GTID 模式下,DDL 和 DML 语句会自动产生不同的 GTID 来标识不同的事务操作。但是 CREATE TABLE ... SELECT ...
只生成了一个 GTID,将 DDL 和 DML 操作合并为一个事务执行,这在语句执行失败时,会造成主从数据不一致。开启 enforce_gtid_consistency
参数就是为了 GTID 事务的原子性。
官方文档也有对 CREATE TABLE ... SELECT ...
这一操作的说明:
解决方案
为了安全,不建议关闭这个参数。
在 MySQL5.7 上可以用拆分成两句 SQL 的方式,解决这个问题,比如:
#先创建表 CREATE TABLE ... LIKE... #再插入数据 INSERT INTO ... SELECT ...
虽然之前的单条 SQL 能简单快速的导数到另一张表,但为了安全可以适当麻烦一点。
MySQL 8.0
好消息是从 MySQL8.0.21 开始,支持原子 DDL 的存储引擎允许使用 CREATE TABLE ... SELECT ...
语句了。
更多技术文章,请访问:https://opensource.actionsky.com/
关于 SQLE
爱可生开源社区的 SQLE 是一款面向数据库使用者和管理者,支持多场景审核,支持标准化上线流程,原生支持 MySQL 审核且数据库类型可扩展的 SQL 审核工具。
SQLE 获取

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
2023 年 的 DBA 有哪些变化?
作者:Craig S. Mullins 数据库专家,IBM 优化冠军,DB2 金牌顾问以及 IDUG 名人堂成员,数据库类畅销书作者,著有《DB2 Developer's Guide》、《Database Administration: The Complete Guide to DBA Practices & Procedures》等。 数据库管理员 (DBA) 对于确保数据库的高可用、安全性和优化始终至关重要。但近年来,DBA 的工作内容发生了许多重大变化。 在讨论它如何变化之前,让我们首先定义它。DBA 是指管理和维护数据库系统(以及访问它们的应用程序和用户)所涉及任务和流程的管理人员。工作内容包括从设计和创建数据库到在整个企业中部署、监控和保护数据。 挑战 海量数据 当今 DBA 面临的最大挑战之一是现代企业生成的 海量数据。随着数据湖和其他大数据存储解决方案的增长,组织正在处理难以管理的大量数据。DBA 需要能够设计和实施数据管理策略,以便在不牺牲性能或数据质量的情况下处理如此大量的数据。 尝试有效地访问大量数据可能会产生一系列问题,包括性能降低、数据丢失或损坏的风险...
- 下一篇
『京墨』1.2.0 发布 |『京墨』开源免费的古诗词文(名句)、歇后语、成语阅读 APP
更新日志 1、修复 SplashScreen 不能正常显示问题 2、优化“古诗词文”界面显示 3、“古诗词文”界面添加列表显示和搜索功能 4、“古诗词文名句”界面添加搜索功能 5、“歇后语”界面添加搜索功能 6、“成语”界面添加列表显示和搜索功能 介绍 『京墨』开源、免费、公益性 APP。献给喜欢中华文字、文学、文化的人。 目前的内容有: 1、古诗词文 10000 首(阙、篇),其中,大多数有注释、译文、赏析以及作者信息; 2、古诗词文名句 10000 句,其中,大多数有出处原文; 3、歇后语 14026 条; 4、成语 30895 条; 使用的数据来自网络(主要是 Github 开源的仓库),可在项目仓库查看 README.md 中的说明。 源码仓库: https://github.com/hefengbao/jingmo https://gitee.com/hefengbao/jingmo
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Red5直播服务器,属于Java语言的直播服务器
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS8编译安装MySQL8.0.19