O seguinte esforço foi publicado no livro " High Performance MySQL, Second Edition ".
Este é um excelente livro e eu o recomendaria a qualquer pessoa.
A resposta curta é:
Com o tamanho e as condições da sua mesa, não importa qual método você escolher, acho que você pode ter uma longa espera.
Conversões de tabela
Existem várias maneiras de converter uma tabela de um mecanismo de armazenamento para outro, cada uma com vantagens e desvantagens.
ALTERAR A TABELA
mysql> ALTER TABLE mytable ENGINE = Falcon;
Essa sintaxe funciona para todos os mecanismos de armazenamento, mas há um problema: pode levar muito tempo. O MySQL executará uma cópia linha por linha da sua tabela antiga em uma nova tabela. Durante esse período, você provavelmente estará usando toda a capacidade de E / S de disco do servidor e a tabela original será bloqueada para leitura enquanto a conversão for executada.
Despejo e importação
Para obter mais controle sobre o processo de conversão, você pode optar por despejar a tabela em um arquivo de texto usando o utilitário mysqldump. Depois de despejar a tabela, você pode simplesmente editar o arquivo de despejo para ajustar a instrução CREATE TABLE que ele contém. Certifique-se de alterar o nome da tabela e seu tipo, porque você não pode ter duas tabelas com o mesmo nome no mesmo banco de dados, mesmo que sejam de tipos diferentes - e o mysqldump assume como padrão escrever um comando DROP TABLE antes do comando CREATE TABLE , para que você possa perder seus dados se não tomar cuidado!
CRIAR e SELECIONAR
A terceira técnica de conversão é um compromisso entre a velocidade do primeiro mecanismo e a segurança do segundo. Em vez de descartar a tabela inteira ou converter tudo de uma vez, crie a nova tabela e use a sintaxe INSERT ... SELECT do MySQL para preenchê-la, da seguinte maneira:
mysql> CREATE TABLE innodb_table LIKE myisam_table;
mysql> ALTER TABLE innodb_table ENGINE=InnoDB;
mysql> INSERT INTO innodb_table SELECT * FROM myisam_table;
Isso funciona bem se você não tiver muitos dados, mas se tiver, geralmente é mais eficiente preencher a tabela de forma incremental, confirmando a transação entre cada bloco, para que os logs de desfazer não cresçam muito. Supondo que o id seja a chave primária, execute essa consulta repetidamente (usando valores maiores de xey cada vez) até copiar todos os dados para a nova tabela:
mysql> START TRANSACTION;
mysql> INSERT INTO innodb_table SELECT * FROM myisam_table
-> WHERE id BETWEEN x AND y;
mysql> COMMIT;
Depois de fazer isso, você ficará com a tabela original, que pode ser descartada quando terminar, e a nova tabela, agora totalmente preenchida. Tenha cuidado para bloquear a tabela original, se necessário, para evitar uma cópia inconsistente dos dados!