MySQL 8.0 客户端工具表设计导致表级锁锁表

测试环境

确认测试当前表没有任何表级锁、查询performance_schema下metadata_locks得到结果。

MySQL 8.0 客户端工具表设计导致表级锁锁表_第1张图片

用Mysql客户端工具,选择表设计打开

MySQL 8.0 客户端工具表设计导致表级锁锁表_第2张图片

从中发现该表家了一个SHARED_HIGH_PRIO 锁,关闭该表设计窗口后,该锁不消失,除关闭连接。

MySQL 8.0 客户端工具表设计导致表级锁锁表_第3张图片

新开个连接,在此对该表打开表设计,发现在添加一个SHARED_HIGH_PRIO 锁

MySQL 8.0 客户端工具表设计导致表级锁锁表_第4张图片

这时修改该表的DDL结构,发现客户端工具会卡死。从metadata_locks表中发现,该表SHARED_HIGH_PRIO升级为SHARED_UPGRADABLE 并且加了一个EXCLUSIVE的X锁。

此时该表的一切DML、DDL都无法进行操作,直接导致该表锁死。如果是生产上这样操作,那一首凉凉送给你。

MySQL 8.0 客户端工具表设计导致表级锁锁表_第5张图片

解决方法:

              通过OWNER_THREAD_ID 查询threads表 找到对应PROCESSLIST_ID进程号,将之前SHARED_HIGH_PRIO锁相关进程杀掉即可。

MySQL 8.0 客户端工具表设计导致表级锁锁表_第6张图片

使用mysql 管理用户进入命令窗口界面:

kill  6205 杀掉对应的 SHARED_HIGH_PRIO锁的进程。

MySQL 8.0 客户端工具表设计导致表级锁锁表_第7张图片

最后,杀掉该进程后,之前修改的该表DDL通过。

总的来说,以后在生产上,MySQL对应表结构修改,最好做到权限控制,否则到时候出问题不好解决。

你可能感兴趣的:(DBA,锁,MySQL8.0,MYSQL之个人成长记录)