在现场网站上将MyISAM表迁移到InnoDB

时间:2014-04-03 15:20:15

标签: mysql innodb myisam

如何在实时工作网站上实时将MyISAM表转换为InnoDB? 我应该将操作菜单“Storage Engine”中的phpmyadmin更改为InnoDB吗? 它会在转换过程中锁定所有表吗?

3 个答案:

答案 0 :(得分:2)

您确实会在桌面上获得写锁定。在创建和复制新表时,您仍然可以从表中读取。

来自ALTER TABLE的文档:

  

执行ALTER TABLE时,原始表可以读取   其他会议(短期内除外)。更新和写入   到ALTER TABLE操作开始后开始的表是   在新表准备好之前停止,然后自动停止   重定向到新表没有任何失败的更新。   ...

     

前面提到的异常是ALTER TABLE块读取   (不只是写)准备安装新的   表.frm文件的版本,丢弃旧文件,然后清除   表和表定义高速缓存中过时的表结构。   此时,它必须获得独占锁。为此,它等待   当前读者完成,并阻止新的读取(和写入)。

答案 1 :(得分:1)

查看pt-online-schema-change。请参阅此回答中的示例https://dba.stackexchange.com/questions/60570/best-way-to-add-a-new-column-to-a-large-table-mysql-myisam/60576#60576

它会阻塞表一秒左右重命名两个表。

答案 2 :(得分:0)

虽然可能工作,但您最好复制一下表并尝试复制存储引擎更改操作。

这也可以估算出手术所需的时间。

如果您在应用程序的副本上执行此操作并进行大量检查,是否可以使用新的存储引擎,那就更好了。