mysql执行alter语句锁表了怎么办

2024-03-12  本文已影响0人  woods_deamon

一、执行的ALTER语句

ALTER TABLE order_info
    ADD COLUMN `flag` int(11) default 0 not null comment '0-不急 1--急';

假设这个表数量比较大,有一千万数据,同时你又有业务场景对它增删改查,肯定会锁表的。锁表了你们业务就会异常,肯定就会报警

二、解决锁表问题

定位mysql内,执行你加字段语句的进程id

SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST WHERE DB = '你的数据库名' and INFO LIKE '%你的表名%';

拿到id

kill id

三、如何预防

最好有专门的sql执行平台和维护人员,比如Yearning,可以防止这类问题发生。

如果没有这些条件,又必须要加字段,执行的时候加上onlineDDL关键字,

ALTER TABLE order_info
        algorithm = inplace,
    lock = none,
    ADD COLUMN `flag` int(11) default 0 not null comment '0-不急 1--急';

lock = none,表示在执行ALTER TABLE语句期间不对表进行锁定,允许其他会话对表进行读写操作。这种方式可以提高并发性,但可能会导致数据不一致的情况。

algorithm = inplace,明确指示 MySQL 尝试在原地修改表结构。这意味着 MySQL 将尝试尽可能在不重新创建整个表的情况下应用修改

这样执行效率会高很多。而且不会锁表。

上一篇 下一篇

猜你喜欢

热点阅读