美文网首页
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