表锁定如何影响表引擎从MyISAM更改为InnoDB?

时间:2012-02-20 18:41:02

标签: mysql innodb myisam

因此我被要求将生产数据库中的几个表的引擎从MyISAM更改为InnoDB。我试图弄清楚这将如何影响生产中的使用(因为服务器无法承受停机时间)。

我读过一些相互矛盾的信息。我读过的一些信息表明表已锁定,并且在转换完成之后才会收到更新(IE,更新未排队,只是在完成之前被丢弃)。

在其他地方,我已经读过,当表被锁定时,插入和更新将排队,直到操作完成,然后执行写操作。

那么故事究竟是什么?

2 个答案:

答案 0 :(得分:2)

这直接来自manual

  

在大多数情况下,ALTER TABLE会制作原始文件的临时副本   表。 MySQL等待修改表的其他操作,   继续。它将更改合并到删除中   原始表,并重命名新表。虽然ALTER TABLE是   执行时,原始表可由其他会话读取。更新   并写入在ALTER TABLE操作之后开始的表   开始停止,直到新表准备好,然后是   自动重定向到新表,没有任何失败的更新。

所以,第二名获胜。他们没有“失败”,他们“陷入僵局”。

答案 1 :(得分:0)

后者是正确的。针对正在更改的表的所有查询都将被阻止,直到alter完成,并在alter完成后进行处理。请注意,这包括读取查询(SELECT)以及写入查询(INSERT,UPDATE,DELETE)。