在运行表的SQL修补程序时锁定数据库



在应用程序中,我们使用MySql 5.6、PHP 7,并且在执行用PHP脚本编写的SQL补丁时锁定整个目标数据库。Patched像添加新表或修改现有表一样不断增加。

在此锁定期间,任何客户都不能登录应用程序。最近,需求发生了变化,我们需要锁定数据库。新的SQL补丁中只存在"ALTER TABLE"命令。

我想知道,在什么情况下数据库应该在执行SQL补丁时被锁定。例如,到目前为止,我可以认为数据库应该锁定为"ALTER"&"RENAME"SQL命令。

有什么建议吗?

不要使用MyISAM,使用InnoDB。避免使用ALTER,或证明其使用合理性。一般来说,模式很少应该被修改。

此外,如果您升级到MySQL 8.0,则会有更多的ALTERs是非阻塞的。

最新更新