MySQL 迁移后无法快速导数据问题解决

 更新时间:2023年10月18日 10:43:59   作者:爱可生开源社区  
这篇文章主要为大家介绍了MySQL 迁移后无法快速导数据问题解决,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

背景

关于 5.6 升级到 5.7 之后,GTID 的相关功能的注意事项。

某金融公司有套系统最近刚迁移完,从 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 ... 语句了。

以上就是MySQL 迁移后无法快速导数据问题解决的详细内容,更多关于MySQL迁移导数据的资料请关注脚本之家其它相关文章!

相关文章

  • MySQL与PHP的基础与应用专题之数据控制

    MySQL与PHP的基础与应用专题之数据控制

    MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,本系列将带你掌握php与mysql的基础应用,本篇带你了解数据控制
    2022-02-02
  • 基于sql语句的一些常用语法积累总结

    基于sql语句的一些常用语法积累总结

    本篇文章是对一些常用的sql语句进行了总结与分析,需要的朋友参考下
    2013-06-06
  • SQL实现LeetCode(185.系里前三高薪水)

    SQL实现LeetCode(185.系里前三高薪水)

    这篇文章主要介绍了SQL实现LeetCode(185.系里前三高薪水),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • MySql中的连接查询问题

    MySql中的连接查询问题

    这篇文章主要介绍了MySql中的连接查询问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • Mysql存储过程中游标的用法实例

    Mysql存储过程中游标的用法实例

    这篇文章主要介绍了Mysql存储过程中游标的用法,以商户关联数据的插入及更新为例分析了MySQL存储过程中游标的使用技巧,需要的朋友可以参考下
    2015-07-07
  • MySQL 数据库的约束及数据表的设计原理

    MySQL 数据库的约束及数据表的设计原理

    这篇文章主要介绍了MySQL 数据库的约束及数据表的设计原理,数据库中的约束即是对插入数据库中的数据进行限定,为了保证数据的有效性和完整性,下面一起来了解具体的详细内容,需要的小伙伴可以参考一下
    2021-12-12
  • Windows服务器MySQL中文乱码的解决方法

    Windows服务器MySQL中文乱码的解决方法

    这篇文章主要介绍了MySQL中文乱码的一些解决方案,本文同时分解了MySQL中文乱码的原因分析,需要的朋友可以参考下
    2015-01-01
  • 详解MySQL中的pid与socket

    详解MySQL中的pid与socket

    不知道你有没有注意过,MySQL 启动时需要配置 pid 及 socket 文件路径。偶尔还会出现因 pid 文件找不到而启动失败的现象,那么 pid 与 socket 文件究竟是干什么用的呢?我们一起来看下本篇文章。
    2021-06-06
  • mysql查询优化之100万条数据的一张表优化方案

    mysql查询优化之100万条数据的一张表优化方案

    这篇文章主要介绍了mysql查询优化之100万条数据的一张表优化方案,需要的朋友可以参考下
    2021-05-05
  • mysql中提高Order by语句查询效率的两个思路分析

    mysql中提高Order by语句查询效率的两个思路分析

    在MySQL数据库中,Order by语句的使用频率是比较高的。但是众所周知,在使用这个语句时,往往会降低数据查询的性能。
    2011-03-03

最新评论