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

来源:互联网 发布:手机淘宝老版本官方 编辑:程序博客网 时间:2024/06/05 20:43

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表。




阅读全文
0 0
原创粉丝点击