1. 程式人生 > >MySQL報錯ERROR 1786 #Olivia丶長歌#

MySQL報錯ERROR 1786 #Olivia丶長歌#

【報錯資訊】

執行create table ... select的時候遇到報錯:

複製程式碼 程式碼如下:
db1 [test] [23:01:58]> create table nifa_trade_1 select * from nifa_trade;
ERROR 1786 (HY000): CREATE TABLE ... SELECT is forbidden when @@GLOBAL.ENFORCE_GTID_CONSISTENCY = 1

【報錯原因】

ERROR1786是由於開啟了enforce_gtid_consistency=true功能導致的,MySQL官方解釋說當啟用enforce_gtid_consistency功能的時候,MySQL只允許能夠保障事務安全,並且能夠被日誌記錄的SQL語句被執行,像create table ... select 和 create temporarytable語句,以及同時更新事務表和非事務表的SQL語句或事務都不允許執行。

db1 [test] [23:28:28]> show variableslike 'ENFORCE_GTID_CONSISTENCY'; +--------------------------+-------+ | Variable_name | Value | +--------------------------+-------+ | enforce_gtid_consistency | ON | +--------------------------+-------+

【解決方法】

由於enforce_gtid_consistency引數是隻讀的,所以必須重啟MySQL服務才能是配置生效。

嘗試線上動態修改時的報錯:

複製程式碼 程式碼如下:
db1 [test] [23:37:56]> set globalenforce_gtid_consistency=true;
ERROR 1238 (HY000): Variable'enforce_gtid_consistency' is a read only variable

修改配置檔案my.cnf

gtid_mode=OFF

enforce_gtid_consistency=OFF

重啟MySQL(這樣既關閉了GTID模式)

如果不想關閉GTID模式,可以將create table (表名) select * from (表名)改寫。