在 MySQL 5.6.14 中執行 CREATE TABLE ... SELECT 時拋出錯誤:
ERROR 1786 (HY000): CREATE TABLE ... SELECT is forbidden when @@GLOBAL.ENFORCE_GTID_CONSISTENCY = 1
檢查變數確認已開啟:
SHOW VARIABLES LIKE 'ENFORCE_GTID_CONSISTENCY'; +--------------------------+-------+ | Variable_name | Value | +--------------------------+-------+ | enforce_gtid_consistency | ON | +--------------------------+-------+
enforce_gtid_consistency=ON 時,MySQL 僅允許「事務安全且可被二進制日誌完整記錄」的語句執行。下列語句會破壞 GTID 一致性,因此被禁止:
CREATE TABLE ... SELECTCREATE TEMPORARY TABLE/etc/my.cnf(或 /usr/local/mysql/my.cnf):
[mysqld] enforce_gtid_consistency = OFF gtid_mode = OFF
service mysql restart
注意: enforce_gtid_consistency 為唯讀變數,不支援動態修改:
SET GLOBAL enforce_gtid_consistency = OFF; -- ERROR 1238 (HY000): Variable 'enforce_gtid_consistency' is a read only variable
將 CREATE TABLE ... SELECT 拆分為兩步:
-- 1. 先建表結構 CREATE TABLE lgmnr_bak LIKE lgmnr; -- 2. 再插入資料 INSERT INTO lgmnr_bak SELECT * FROM lgmnr;
此寫法符合 GTID 一致性要求,無需變更配置。
CREATE TABLE ... SELECT 或臨時表,評估是否真需開啟 GTID;若非嚴格需要 GTID 複製,可關閉相關參數。CREATE TABLE LIKE + INSERT SELECT 模式,兼容 GTID 與非 GTID 環境。