表锁定对从MyISAM更改表引擎到InnoDB有什么影响?

3

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

我阅读了一些相互矛盾的信息。 一些信息表明,表会被锁定,在转换完成之前将无法接收更新(即更新不会排队,只是在转换完成后被丢弃)。

在其他地方,我读到的是,虽然表被锁定,但插入和更新将排队等待操作完成,然后才执行写操作。

那么这里究竟是什么情况呢?


我修改了问题,使其更加明确。 - dmarra
2个回答

3

以下内容直接来自手册

在大多数情况下,ALTER TABLE会创建原始表的临时副本。MySQL等待修改表格的其他操作,然后继续执行。它将更改合并到副本中,删除原始表,然后重命名新表。在ALTER TABLE执行时,其他会话可以读取原始表。在ALTER TABLE操作开始后开始的对表格的更新和写入将被暂停,直到新表准备好,然后自动重定向到新表而不会有任何失败的更新。

所以,第二个选项胜出。它们不是“失败的”,而是“被暂停的”。


0

后者是正确的。所有针对正在被修改的表的查询都会被阻塞,直到修改完成,然后再进行处理。请注意,这包括读取查询(SELECT)和写入查询(INSERT、UPDATE、DELETE)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接