如何在实时工作网站上实时将MyISAM表转换为InnoDB? 我应该将操作菜单“Storage Engine”中的phpmyadmin更改为InnoDB吗? 它会在转换过程中锁定所有表吗?
答案 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)
虽然可能工作,但您最好复制一下表并尝试复制存储引擎更改操作。
这也可以估算出手术所需的时间。
如果您在应用程序的副本上执行此操作并进行大量检查,是否可以使用新的存储引擎,那就更好了。