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;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM