场景复现:
ALTER TABLE `user` ADD COLUMN `parent_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '父母id' AFTER `id`;
原因:
存在一个正在执行的事务,这个事务刚好有对user表的查询。这个事务是我本地服务产生的,打了一个断点在那,事务一直没有提交或者回滚。
排查:
1. 查看正在运行的进程列表。
show PROCESSLIST
-- kill 进程id可以结束任务。 例如:
-- kill 142045140000000
2. 查看锁占用情况:
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;
3. 该命令会列出所有正在被锁住的事务信息,包括锁类型、锁定的对象等。
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;