mysql5.7 启用gtid,导致无法创建和删除表
16lz
2021-01-22
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表。
更多相关文章
- android-exploitme(四):参数篡改
- 如何在函数中将两个参数从1个类传递给另一个?
- Android的startActivityForResult()与onActivityResult()与setRe
- Android开发入门之为应用添加多个Activity与参数传递
- java socket参数详解:TcpNoDelay
- 在spring 中如何注入map,set,list,property等参数
- 如何将动态参数传递给jquery函数
- 使用字符串参数调用AndroidJni静态方法。
- Java开发水吧点饮品系统(顶层父类对象做接口参数)