O seguinte trecho saiu do livro " High Performance MySQL, Second Edition ".
Este é um excelente livro e eu recomendaria a todos.
A resposta curta é:
Com o tamanho e as condições da sua mesa, independentemente do método escolhido, acho que você está em uma longa espera.
Conversões de tabela
Existem várias maneiras de converter uma tabela de um mecanismo de armazenamento para outro, cada com vantagens e desvantagens.
ALTERAR 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 irá executar uma cópia linha por linha da sua tabela antiga em uma nova tabela. Durante Dessa vez, você provavelmente usará toda a capacidade de E / S de disco do servidor, e o original a tabela será bloqueada por leitura enquanto a conversão é executada.
Despejo e importação
Para obter mais controle sobre o processo de conversão, você pode optar por primeiro descartar a tabela para um arquivo de texto usando o utilitário mysqldump. Depois de você ter jogado a mesa, você pode simplesmente editar o arquivo de despejo para ajustar a instrução CREATE TABLE que ele contém. Estar Certifique-se de alterar o nome da tabela, bem como o 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 usa como padrão escrever um comando DROP TABLE antes de CREATE TABLE, então você pode perder seus dados se você não for cuidadoso!
CREATE e SELECT
A terceira técnica de conversão é um compromisso entre o primeiro mecanismo de velocidade e a segurança do segundo. Em vez de eliminar a tabela inteira ou converter tudo de uma vez, crie a nova tabela e use a sintaxe INSERT ... SELECT do MySQL para preenchê-lo da seguinte forma:
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 fizer isso, é mais eficiente para preencher a tabela incrementalmente, confirmando a transação entre cada parte então os desfazer logs não crescem muito. Assumindo que id é a chave primária, execute este consulta repetidamente (usando valores maiores de x e y de cada vez) até ter copiado 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 feito com ele, e a nova tabela, que agora está totalmente preenchida. Tenha cuidado para travar o tabela original, se necessário, para evitar uma cópia inconsistente dos dados!