Tidb 中访问information_schema.KEY_COLUMN_USAGE表 报错

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。

  • 【TiDB 版本】:3.0.2
  • 【问题描述】:从mysql客户端登陆TIDB的时候,访问information_schema.KEY_COLUMN_USAGE 表的时候会报ERROR 2013 (HY000): Lost connection to MySQL server during query。 访问其他任何表都没有问题。检查没有出现OOM,在日志中有panic, 下面是日志 若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出的打印结果,请务必全选并复制粘贴上传。

只要涉及到这个表,就会报错吗? 能否试一下count这个表的数据量,看下是否报错?

是的,这个是我刚count的88DEB3D2-43A0-4fa2-AE31-D927C575FDB2

提供下 tidb_stderr.log 的日志吧,我们看下是否是已知问题。

好的,pd_stderr.log和tikv_stderr.log是空的,tidb_stderr.log就一行数据,而且是之前的。

好的。我们先内部反馈下,稍等回复。

@puredba 是不是在建表时有用到 foreign key ?

下面是复现 sql, drop column 时没有check foreign key, 导致后面查询 KEY_COLUMN_USAGE 时 panic。

create table t1 (a int,b int);
create table t2 (c int,d int,foreign key (d) references t1 (b));
alter table t2 drop column d;
select count(*) from information_schema.KEY_COLUMN_USAGE;

你好,我查过了系统表,目前只有primary key 和unique,目前没有发现其他的约束,可以通过其他方式来查看之前有创建过外键吗?那现在这个问题怎么来解决呢?

@puredba , 其他的系统表查不到 foreign key 的信息,show create table 也show 不出来。以前支持 foreign key 只是为了方便和 mysql 同步数据。

现在要查哪个表建立过外键,只能拿 ddl history 后, 用 foreign key 搜索:

curl "http://$TiDB_IP:10080/ddl/history" > ddl-history.txt
grep -i 'foreign' ddl-history.txt

然后把相应的 table 的 foreign key 删除:

alter table t_xx drop foreign key xxx;

嗯嗯,是有历史 外键的语句,解决了,谢谢!

:+1::+1::+1: