GreatSQL社区

搜索

[已解决] 对表进行DDL操作时,mysql.columns表报唯一键重复的错误

3836 3 2022-12-19 16:22
对一张表进行DDL操作时,提示报错 ERROR 1062 (23000): Duplicate entry '4240-EC?' for key 'columns.table_id'


报错语句示例如下
ALTER TABLE TEST1 ADD C1 INT NOT NULL;

即使把表删掉了,重新建也会报同样的错误
CREATE TABLE TEST1
(C1 INT NOT NULL)

将表名或者列名更改一下,语句便可以成功执行
ALTER TABLE TEST2 ADD C1 INT NOT NULL;
ALTER TABLE TEST1 ADD C2 INT NOT NULL;

就是说,只要是TEST1(表名)和C1(列名)组合在一起,就无法建表。



从mysql的系统表找了一下,应该是mysql.columns报的唯一键重复的错误,这张表中的存放表名的列和存放列名的列貌似是一个组合唯一键,猜测是为了控制同一张表不允许出现名称相同的列,但是这张表用root也没有权限查看,具体是怎么回事就不知道了。



请各位老师帮忙分析分析,怎么会出现这种情况,是mysql的元数据更新失败?还是其他什么原因导致的
全部回复(3)
yejr 2022-12-21 11:23:55
1、什么版本
2、完整的建表DDL,以及加列的DDL都发一下
四马路刚子 2022-12-21 17:19:49
yejr 发表于 2022-12-21 11:23
1、什么版本
2、完整的建表DDL,以及加列的DDL都发一下

你好!
mysql的版本是8.0.26,5台mysql组成的mgr多主集群。
DDL这个由于是线上真实数据,这个很抱歉并不能提供,但是这个问题与DDL应该影响不大,因为在不同的表进行同样DDL操作时都出现了相同的情况。
能定位到的报错信息应该是mysql.columns这张系统表中的table_id唯一键所引起的。
现在发现的情况是一张A库的表table1,在B库被视图view1所引用了,对table1进行某种DDL(如truncate,drop掉重建)之后,再对table1进行任何DDL操作,都会报问题中的错误,如果把view1删掉,重新再执行DDL则均会成功,但是view1就再也建立不上了,所以我怀疑是不是视图影响了mysql的元数据,导致这个问题的发生
WechatIMG46.jpeg
yejr 2022-12-26 13:01:32
四马路刚子 发表于 2022-12-21 17:19
你好!
mysql的版本是8.0.26,5台mysql组成的mgr多主集群。
DDL这个由于是线上真实数据,这个很抱歉并不能 ...

现在发现的情况是一张A库的表table1,在B库被视图view1所引用了
===
你的MGR在初始化时没有让各节点先保证数据一致性吗
四马路刚子

1

主题

0

博客

6

贡献

新手上路

Rank: 1

积分
10

合作电话:010-64087828

社区邮箱:greatsql@greatdb.com

社区公众号
社区小助手
QQ群
GMT+8, 2024-11-23 16:20 , Processed in 0.023732 second(s), 18 queries , Redis On.
快速回复 返回顶部 返回列表