Você pode fazer isso. A conversão do MyISAM para o InnoDB não deve ser um problema, pois o InnoDB possui mais recursos que não estão disponíveis no MyISAM, como transações.
Você pode alterar as tabelas enquanto o banco de dados está sendo executado. Não há necessidade de desligamento, mas essa operação bloqueará as tabelas.
Pelo tempo que levará, isso depende das especificações do servidor / carga / tamanho do banco de dados, etc.
Você pode fazer isso usando um script para automatizar o processo. Usando um comando show tables
, você pode obter a lista de tabelas. Então, usando um script simples, você pode ler essa lista e executar comandos de alteração de tabela.
Aqui está um script em perl simples que lerá a lista de tabelas de um arquivo e gravará as consultas SQL em outro arquivo. Após invocar este script, você pode alimentar o arquivo de saída para o comando mysql
para fazer as mudanças necessárias.
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);