美文网首页
mysql执行alter语句锁表了怎么办

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

作者: woods_deamon | 来源:发表于2024-03-12 15:26 被阅读0次

一、执行的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 将尝试尽可能在不重新创建整个表的情况下应用修改

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

相关文章

网友评论

      本文标题:mysql执行alter语句锁表了怎么办

      本文链接:https://www.haomeiwen.com/subject/rnovzdtx.html