MySQL:如何在生产数据库中将许多MyISAM表转换为InnoDB?

我们有一个完全由MyISAM表组成的生产数据库.我们正在考虑将它们转换为InnoDB以获得更好的并发性.可靠性.

>我可以在不关闭MySQL的情况下将myISAM表更改为InnoDB吗?这里推荐的程序是什么?
>这样的转换需要多长时间?所有表的总大小约为700MB
>有相当多的表.有没有办法一次性将ALTER TABLE应用于所有MyISAM表而不是逐个执行?
>我需要注意的任何陷阱?

谢谢

最佳答案
你能行的.从MyISAM转换为InnoDB应该不是问题,因为InnoDB具有MyISAM中没有的更多功能,例如事务.

您可以在数据库运行时更改表.无需关闭,但此操作将锁定表.

它需要的时间,这取决于服务器规格/负载/数据库大小等.

您可以使用脚本自动执行该过程.使用命令show tables,可以获取表的列表.然后,使用简单的脚本,您可以读取此列表并执行alter table命令.

这是一个简单的perl脚本,它将从文件中读取表列表并将SQL查询写入另一个文件中.调用此脚本后,您可以将输出文件提供给mysql命令以执行所需的更改.

open(INFILE, "< tables_list.txt");
open(OUTFILE, "> alter_tables.sql");
foreach my $name (<INFILE>) {
   chomp($name);
   print OUTFILE "ALTER TABLE $name engine=InnoDB;\n";
}
close(INFILE);
close(OUTFILE);

转载注明原文:MySQL:如何在生产数据库中将许多MyISAM表转换为InnoDB? - 代码日志