mysql错误处理之ERROR1786(HY000)
ERROR1786(HY000)
【环境描述】
msyql5.6.14
【报错信息】
执行createtable...select的时候遇到报错:
db1[test][23:01:58]>createtablelgmnr_bakselect*fromlgmnr;
ERROR1786(HY000):CREATETABLE...SELECTisforbiddenwhen@@GLOBAL.ENFORCE_GTID_CONSISTENCY=1
【报错原因】
ERROR1786是由于开启了enforce_gtid_consistency=true功能导致的,MySQL官方解释说当启用enforce_gtid_consistency功能的时候,MySQL只允许能够保障事务安全,并且能够被日志记录的SQL语句被执行,像createtable...select和createtemporarytable语句,以及同时更新事务表和非事务表的SQL语句或事务都不允许执行。
db1[test][23:28:28]>showvariableslike"ENFORCE_GTID_CONSISTENCY"; +--------------------------+-------+ |Variable_name|Value| +--------------------------+-------+ |enforce_gtid_consistency|ON| +--------------------------+-------+
【解决方法】
由于enforce_gtid_consistency参数是只读的,所以必须重启MySQL服务才能是配置生效。
尝试在线动态修改时的报错:
db1[test][23:37:56]>setglobalenforce_gtid_consistency=true;
ERROR1238(HY000):Variable"enforce_gtid_consistency"isareadonlyvariable
下面是其他网友的补充
一般mysql5.7以前版本是支持createtableXXXasselect*fromXXX;这种创建表的语法,但是MySQL5.7.x版本里面gtid是开启的,会报错
ERROR1786(HY000):StatementviolatesGTIDconsistency:CREATETABLE...SELECT.
官方说明:https://dev.mysql.com/doc/refman/5.7/en/replication-gtids-restrictions.html
CREATETABLE...SELECTstatements.CREATETABLE...SELECTisnotsafeforstatement-basedreplication.Whenusingrow-basedreplication,thisstatementisactuallyloggedastwoseparateevents—oneforthecreationofthetable,andanotherfortheinsertionofrowsfromthesourcetableintothenewtablejustcreated.Whenthisstatementisexecutedwithinatransaction,itispossibleinsomecasesforthesetwoeventstoreceivethesametransactionidentifier,whichmeansthatthetransactioncontainingtheinsertsisskippedbytheslave.Therefore,CREATETABLE...SELECTisnotsupportedwhenusingGTID-basedreplication.
解决办法关闭GTID模式:
my.cnf里面修改参数为:
gtid_mode=OFF
enforce_gtid_consistency=OFF
重启MySQL,再次创建成功:
mysql>showvariableslike"%gtid_mode%"; +---------------+-------+ |Variable_name|Value| +---------------+-------+ |gtid_mode|OFF| +---------------+-------+ 1rowinset(0.01sec) mysql>showvariableslike"%enforce_gtid_consistency%"; +--------------------------+-------+ |Variable_name|Value| +--------------------------+-------+ |enforce_gtid_consistency|OFF| +--------------------------+-------+ 1rowinset(0.01sec) mysql>createtablet1asselect*fromBS_CONT; QueryOK,0rowsaffected(0.12sec)
相关文章
- MySQL Error number: MY-010462; Symbol: ER_RPL_BINLOG_STARTING_DUMP; SQLSTATE: HY000 报错 故障修复 远程处理
- MySQL Error number: MY-010884; Symbol: ER_INNODB_PK_ONLY_IN_MYSQL; SQLSTATE: HY000 报错 故障修复 远程处理
- MySQL Error number: MY-011051; Symbol: ER_INNODB_IDX_CNT_FEWER_THAN_DEFINED_IN_MYSQL; SQLSTATE: HY000 报错 故障修复 远程处理
- 图文详解mysql中with…as用法
- MySQL Error number: MY-013781; Symbol: ER_GRP_RPL_MYSQL_NETWORK_PROVIDER_CLIENT_ERROR_COMMAND_ERR; SQLSTATE: HY000 报错 故障修复 远程处理
- MySQL二进制包安装简易指南(mysql二进制包安装)
- C语言连接MySQL数据库实现快速网络查询(c链接mysql数据库)
- 解决MySQL无法连接服务器的方法(mysql不能连接服务器)
- MySQL中修复ID值的方法(mysqlid修改)
- 改变MySQL Root密码:有效的方法(root密码mysql)
- 数据快速检索MySQL中的数据:使用PHP(php检索mysql)
- 提升效率:MySQL查询优化器的应用(mysql的查询优化器)
- MySQL中文API:数据操作更便捷(mysql中文api)
- MySQL中的关联查询(关联查询mysql)
- MySQL参数详解,让你更加了解Mysql参数定义及优化。(mysql参数定义)
- MySQL镜像:优化数据库备份与性能的选择(mysql数据库镜像)
- 快速掌握常用Mysql语句,让你的MySQL更强大(常用mysql语句)
- MySQL安装失败,困惑不已(mysql 安装不上)
- 如何在MySQL中使用user变量(mysql 中$user)
- 数据库中的MySQL 理解Mysql数据库的重要性(MySql中mysql)
- MySQL中AS的用法总结(mysql中as用法总结)
- 使用MySQL创建学生信息表格,轻松高效管理学生档案(mysql中创建学生信息)
- 如何解决MySQL自动关闭的问题(mysql 一直自动关闭)
- MySQL与Date数据类型的应用及注意事项(mysql。date)
- GET MYSQL 免费下载并破解MySQL数据库软件(mysql下载和破解)