首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

解決 MySQL ERROR 1786 (HY000):enforce_gtid_consistency 導致 CREATE TABLE ... SELECT 失敗

     編輯:MySQL 資料庫相關知識

在 MySQL 5.6.14 中執行 CREATE TABLE ... SELECT 時遇到:

ERROR 1786 (HY000): CREATE TABLE ... SELECT is forbidden when @@GLOBAL.ENFORCE_GTID_CONSISTENCY = 1

根因分析

開啟 enforce_gtid_consistency=ON 後,MySQL 僅允許「事務安全且可被 Binlog 記錄」的語句執行。CREATE TABLE ... SELECT、CREATE TEMPORARY TABLE、混合更新事務表與非事務表等操作均被禁止,因其無法保證 GTID 一致性。

mysql> SHOW VARIABLES LIKE 'ENFORCE_GTID_CONSISTENCY';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| enforce_gtid_consistency | ON    |
+--------------------------+-------+

解決方案

enforce_gtid_consistency 為只讀變數,無法動態修改,嘗試 SET GLOBAL 會報 ERROR 1238 (HY000)。必須修改配置文件 my.cnf 並重啟 MySQL:

# my.cnf
[mysqld]
enforce_gtid_consistency = OFF

重啟後驗證:

mysql> SHOW VARIABLES LIKE 'ENFORCE_GTID_CONSISTENCY';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| enforce_gtid_consistency | OFF   |
+--------------------------+-------+

業務權衡建議

  • 若業務強依賴 GTID 複制,建議改寫 SQL:先 CREATE TABLE 再 INSERT ... SELECT,或使用 CREATE TABLE LIKE + INSERT 組合。
  • 若可接受關閉 GTID 強一致性檢查,按上述方式關閉即可。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved