已解决
线上mysql表字段加不了Fail to get MDL on replica during DDL synchronize,排查记录
来自网友在路上 145845提问 提问时间:2023-10-10 03:14:05阅读次数: 45
最佳答案 问答题库458位专家为你答疑解惑
某天接近业务高峰期想往表里加字段加不了,报错:Fail to get MDL on replica during DDL synchronize
遂等到业务空闲时操作、还是加不了,
最后怀疑是相关表被锁了,或者有事务一直进行(可能这俩是一个意思),
于是通过查看当前正在执行的线程和事务ID,kill掉遂解决问题
最后还有两个疑问没解决:
1.kill线程ID时只能由对应的sql执行者删除,让运维删都删不了,会显示没有该线程号;
2.kill掉的线程ID正在执行的sql里貌似没有包含我要操作的表,这样居然也会互相影响吗
另外,其他同事也给了我一些更改表结构但不会锁表的语句(对于我这个场景不适应),但还是备份下
查当前mysql的线程和事务信息
SHOW FULL PROCESSLIST 是一个用于查看MySQL服务器当前运行的所有线程和它们的状态的SQL命令。通过执行这个命令,你可以获取有关MySQL服务器上运行的所有连接和线程的详细信息,包括SQL语句、连接时间、执行时间等。以下是执行 SHOW FULL PROCESSLIST 命令后可能返回的一些信息字段:Id:线程的唯一ID。
User:连接的用户名。
Host:连接的主机名。
db:当前正在使用的数据库。
Command:线程正在执行的命令(例如,Sleep、Query、Connect)。
Time:线程运行的时间(秒)。
State:线程的当前状态。
Info:线程执行的SQL语句。-- 显示mysql正在运行的线程
SHOW FULL PROCESSLIST-- 查询当前事务的线程号、事务ID,执行状态,sql
SELECT
trx_mysql_thread_id,trx_id,trx_started AS start_time,trx_state AS state,trx_query AS query
FROMinformation_schema.innodb_trx;
加字段但不锁表
ALTER TABLE `user` ADD `age` int NOT NULL DEFAULT '0' COMMENT '年龄',
ALGORITHM=Inplace,
LOCK=NONE;
查看全文
99%的人还看了
相似问题
猜你感兴趣
版权申明
本文"线上mysql表字段加不了Fail to get MDL on replica during DDL synchronize,排查记录":http://eshow365.cn/6-18124-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!
- 上一篇: LENGTH() vs CHAR_LENGTH()
- 下一篇: NPDP产品经理知识(产品创新流程)