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;