Linux上mysql错误处理之ERROR 1786 (HY000)

1.错误描述

在数据库中执行语句:CREATE TABLE mis_auto_sagaw_sub_qiyexiaoshougepinzhobak131 SELECT * FROM mis_auto_sagaw_sub_qiyexiaoshougepinzho WHERE masid IN (SELECT id FROM mis_auto_sagaw WHERE projectid=88);

发现抛出错误:CREATE TABLE ... SELECT is forbidden when @@GLOBAL.ENFORCE_GTID_CONSISTENCY = 1

查看这个参数的开启情况,可以使用命令:show variables like 'ENFORCE_GTID_CONSISTENCY';

Mysql5.6及其以上版本会默认开启该参数,当enforce_gtid_consistency=true开启时,Mysql只允许能够保障事务安全&&能够被日志记录的SQL语句才能被执行,所以这时候create ,select,同时更新事务表&&非事务表的SQL语句或事务都执行不了

2.解决方案

在配置文件将该配置关闭掉。

要想关闭它,从命令行输入命令关闭是不行的。因为它仅仅是读取参数。所以不允许修改。如果要执行命令去修改它的话,会报下面的错误。

这时我们要找到Mysql的配置文件,如果不知道配置文件在哪儿,可以使用find / -name my.cnf   或者whereis my.cnf 而mysql的默认配置文件是/ect/my.cnf

使用find / -name my.cnf查找:

哇,一下子出现了这么多配置文件,那么mysql到底使用的是哪一个配置文呢?我们可以使用命令:mysql --help | grep my.cnf来查看mysql究竟使用的是哪一个配置文件。

图片中的意思是mysql会优先寻找第一个配置文件,如果找不到,再寻找第二个,直到找到有效的my.cnf,这儿Mysql使用的是/etc/my.cnf这个文件,我们打开它。

注释掉里面的内容。如果配置文件中没有这些参数,可以复制到配置文件中,放到mysqld下面

master_info_repository = TABLE

relay_log_info_repository = TABLE

log_bin = bin.log

sync_binlog = 1

gtid_mode = on

enforce_gtid_consistency = 1

log_slave_updates

binlog_format = row

relay_log = relay.log

Wrelay_log_recovery = 1

binlog_gtid_simple_recovery = 1

slave_skip_errors = ddl_exist_errors

保存,重启mysql

service mysqld restart

重启查看生效。

3.检查配置是否生效

这时再进入mysql查看ENFORCE_GTID_CONSISTENCY 的开启状态。

show variables like 'ENFORCE_GTID_CONSISTENCY';

可以看到,已经关闭,然后我们再试一试刚才的建表语句。

OK!执行语句没有报错,也正验证了ENFORCE_GTID_CONSISTENCY 已经关闭并且生效了。

以上。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值