Mysql Statement violates GTID consistency: CREATE TABLE ... SELECT.

1.背景

今天在开发环境验证好的备份sql脚本,就是用create table tnm as select * from tnm1(含结构和数据)。到了测试那里就报了错误:Mysql Statement violates GTID consistency: CREATE TABLE ... SELECT.

2.原因分析

查看了使用的数据库版本都是5.6以上,结合官方文档给出的解释:

MySQL5.6及以上的版本,开启了 enforce_gtid_consistency=true 功能导致的,MySQL官方解释说当启用 enforce_gtid_consistency 功能的时候,MySQL只允许能够保障事务安全,并且能够被日志记录的SQL语句被执行,像create table … select 和 create temporarytable语句,以及同时更新事务表和非事务表的SQL语句或事务都不允许执行。

对比了开发和测试库的参数,发现测试库的参数为on,开发的为off。

3.解决方法

3.1 在有超级用户权限的情况下将参数值改为off

在命令窗口或者配置文件my.cnf

SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY = off;

 

3.2将原来的sql拆成两部分,先复制结构,再插入数据

create table a like b;

insert into a select * from b;

 

posted on 2021-04-01 17:16  Leader.Z  阅读(2259)  评论(0编辑  收藏  举报