mysql5.7 启用gtid,导致无法创建和删除表

mysql version: mysql5.7.18

OS version: CentOS Linux release 7.3

场景:在使用hadoop过程中,访问mysql数据库时,报如下错误信息:

“User can't run DDL statements on the specified database. Attempt to create and drop a table failed.”


原因:在mysql5.7中使用了 GTID模式,引入了GTID参数,如下所示

gtid_mode = ON
enforce_gtid_consistency = ON

enforce_gtid_consistency 强制GTID一致性, 启用后以下命令无法再使用
create table ... select ...

但是在hadoop在使用过程中,恰好使用了上述中的建表语句,所以导致了失败。

具体一点就是create table ... select ...在启用强制GTID后,其实是两个独立事件,不符合强一致性的规则,所以创建失败。


解决方法:暂时的解决方案为,由于环境并不是很重要,所以先把GTID模式停了;

gtid_mode = off
enforce_gtid_consistency = off

修改参数后,重新启动数据库。

其它解决方法:把create table ... select 分解为2个sql来进行,即可解决。


扩展:启用强制GTID一致性的副作用:

(1) 不能同时揉合多个事件;

(2) 事务内部不能创建临时表;

create temporary table

(3) 不能在同一事务中即更新InnoDB表,又更新MyISAM表。




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值