因此我被要求将生产数据库中的几个表的引擎从MyISAM更改为InnoDB。我试图弄清楚这将如何影响生产中的使用(因为服务器无法承受停机时间)。
我读过一些相互矛盾的信息。我读过的一些信息表明表已锁定,并且在转换完成之后才会收到更新(IE,更新未排队,只是在完成之前被丢弃)。
在其他地方,我已经读过,当表被锁定时,插入和更新将排队,直到操作完成,然后执行写操作。
那么故事究竟是什么?
答案 0 :(得分:2)
这直接来自manual:
在大多数情况下,ALTER TABLE会制作原始文件的临时副本 表。 MySQL等待修改表的其他操作, 继续。它将更改合并到删除中 原始表,并重命名新表。虽然ALTER TABLE是 执行时,原始表可由其他会话读取。更新 并写入在ALTER TABLE操作之后开始的表 开始停止,直到新表准备好,然后是 自动重定向到新表,没有任何失败的更新。
所以,第二名获胜。他们没有“失败”,他们“陷入僵局”。
答案 1 :(得分:0)
后者是正确的。针对正在更改的表的所有查询都将被阻止,直到alter完成,并在alter完成后进行处理。请注意,这包括读取查询(SELECT)以及写入查询(INSERT,UPDATE,DELETE)。