ERROR 1786 (HY000): Statement violates GTID consistency: CREATE TABLE ... SELECT.

創建表時報錯,如下:

mysql> create table t_idb_big as select * from information_schema.columns;
ERROR 1786 (HY000): Statement violates GTID consistency: CREATE TABLE ... SELECT.
mysql>

錯誤原因:

這是因爲在5.6及以上的版本內,開啓了 enforce_gtid_consistency=true 功能導致的,MySQL官方解釋說當啓用 enforce_gtid_consistency 功能的時候,MySQL只允許能夠保障事務安全,並且能夠被日誌記錄的SQL語句被執行,像create table … select 和 create temporarytable語句,以及同時更新事務表和非事務表的SQL語句或事務都不允許執行。

解決方法:

方法一:
修改 :SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY = off;
配置文件中 :ENFORCE_GTID_CONSISTENCY = off;
方法二(測試成功):
將 create table xxx as select 的方式拆分成兩部分。
create table xxxx like data_mgr;
insert into xxxx select *from data_mgr;


1.當設置ENFORCE_GTID_CONSISTENCY = off時,錯誤消息說GTID_MODE = ON時需要ENFORCE_GTID_CONSISTENCY = ON,也就是需要設置GTID_MODE = OFF才能設置ENFORCE_GTID_CONSISTENCY = off
mysql> SET GLOBAL ENFORCE_GTID_CONSISTENCY = off;
ERROR 1779 (HY000): GTID_MODE = ON requires ENFORCE_GTID_CONSISTENCY = ON.
mysql> 

2.設置GTID_MODE = OFF
mysql> set global GTID_MODE = off;
ERROR 1788 (HY000): The value of @@GLOBAL.GTID_MODE can only be changed one step at a time: OFF <-> OFF_PERMISSIVE <-> ON_PERMISSIVE <-> ON. Also note that this value must be stepped up or down simultaneously on all servers. See the Manual for instructions.
mysql>
上面提示如果當前值爲ON,要設置爲OFF,則先設置爲GTID_MODE=ON_PERMISSIVE,再設置GTID_MODE=OFF_PERMISSIVE,再設置GTID_MODE = off,如果將OFF設置爲ON,則反過來設置即可。

繼續設置:
mysql> set @@GLOBAL.GTID_MODE=ON_PERMISSIVE;
Query OK, 0 rows affected (0.01 sec)
mysql> set @@GLOBAL.GTID_MODE=OFF_PERMISSIVE;
ERROR 1766 (HY000): The system variable gtid_mode cannot be set when there is an ongoing transaction.

上面報錯,當有正在進行的事務時,不能設置,所以就COMMIT一下:
mysql> commit;
Query OK, 0 rows affected (0.00 sec)

mysql> set @@GLOBAL.GTID_MODE=OFF_PERMISSIVE;
Query OK, 0 rows affected (0.01 sec)

mysql> 
mysql> set @@GLOBAL.GTID_MODE=OFF;
Query OK, 0 rows affected (0.01 sec)

mysql> 
mysql> 
mysql> show variables like 'GTID_MODE';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| gtid_mode     | OFF   |
+---------------+-------+
1 row in set (0.00 sec)

mysql> 
3.然後再設置SET GLOBAL ENFORCE_GTID_CONSISTENCY = off:
mysql> SET GLOBAL ENFORCE_GTID_CONSISTENCY = off;
Query OK, 0 rows affected (0.00 sec)

mysql>
 

2019.11.07

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章