Temos um banco de dados razoavelmente pequeno que queríamos converter do MyISAM para o InnoDB. Sendo noobs de banco de dados, acabamos de converter (usando alter table) sem sequer derrubar o site.
Agora que a conversão está concluída, muitas linhas intermitentes parecem estar ausentes. Isso possivelmente ocorre devido a operações durante a conversão? Ou a questão está em outro lugar?
Respostas:
A execução de um ALTER para alterar os mecanismos de armazenamento não fará com que as linhas desapareçam. No entanto, deixe-me oferecer alguns conselhos, pois você disse que é 'noobs do banco de dados' na sua pergunta.
Ao modificar o esquema existente ou fazer qualquer coisa que possa afetar os dados, aqui estão alguns conselhos básicos:
Provavelmente há muito mais em que eu poderia entrar, mas as opções acima fornecerão opções quando algo der errado.
No que diz respeito aos dados / linhas ausentes, não há como saber se há um snapshot "antes / depois" para comparar. Você pode comparar com o backup mais recente para verificar pelo menos isso.
fonte
Uma das melhores maneiras de converter o MyISAM para o InnoDB sem muito tempo de inatividade tem apenas um pré-requisito: Use um escravo de replicação.
Aqui está uma visão geral do plano
Parece simples? Há muitos detalhes por trás disso.
Criar configuração de mestre de replicação / escravo
Existe uma maneira elegante de criar um Escravo sem muita perturbação para o Mestre. Eu escrevi dois posts:
Em vez de detalhar como usar o rsync, leia essas duas postagens.
Converta todas as tabelas MyISAM do escravo em InnoDB
No DB Slave, você pode a seguinte instrução SQL:
Para o MySQL 5.5:
Versão para MySQL anterior ao MySQL 5.5
Usando a saída da consulta, você tem um script de conversão para o escravo.
Você deve colocar essas duas linhas na parte superior do script:
O script primeiro desabilitará o registro binário (se você configurou o escravo para ter registros binários), interromperá a replicação e converterá cada tabela MyISAM em InnoDB.
Aqui está como criar esse script e executá-lo:
Aponte seu aplicativo para o Escravo
Execute consultas SELECT do escravo. Se você estiver satisfeito com o conteúdo dos dados no Escravo, sinta-se à vontade para apontar seu aplicativo para o escravo da seguinte maneira:
SHOW SLAVE STATUS\G
e verifique se Seconds_Behind_Master é 0service mysql stop
(o tempo de inatividade é iniciado)Se você chegou a esse ponto ileso, PARABÉNS !!!
BÔNUS ADICIONADOS : Se você configurar a Replicação Mestre / Mestre (também conhecida como Replicação Circular) em vez de Mestre / Escravo, poderá fazer isso:
SHOW SLAVE STATUS\G
e verifique se Seconds_Behind_Master é 0STOP SLAVE;
CHANGE MASTER TO MASTER_HOST='';
O que você tem agora é Mestre / Escravo ao contrário. O novo mestre possui dados do InnoDB e o antigo mestre agora é escravo dos dados do MyISAM. Se você dividir leituras e gravações, as leituras podem ir do escravo (as leituras são mais rápidas do MyISAM do que o InnoDB) e as gravações vão para o mestre (suporte transacional para o InnoDB). Como Hannah Montana canta, você obtém o melhor dos dois mundos (sim, eu tenho duas filhas que amam o show) !!!
OUTRO BÔNUS ADICIONADO : Como o Master agora é InnoDB, você pode executar o mysqldump do Master sem tempo de inatividade e sem interferir nas transações. A única desvantagem é aumentar a E / S da CPU e do disco. Você pode, portanto, fazer um mysqldump de estruturas de tabela apenas no Master (InnoDB) e um mysqldump dos dados apenas no slave (Esse dump não terá referências ao InnoDB ou MyISAM. Serão apenas dados) mais um mysqldump do estruturas de tabela para o escravo ter o layout MyISAM.
As possibilidades podem continuar por causa desta nova configuração ...
UPDATE 2011-08-27 19:50 EDT
Me desculpe. Eu não li completamente a pergunta. Você já realizou a conversão .
Somente se você já tiver o log binário ativado e tiver um backup anterior, poderá
service mysql stop
service mysql start --datadir=/var/lib/mysql2
Isso deve capturar tudo o que foi gravado e a conversão deve ser ativada . Novamente, tudo isso é contigente porque você já teve o log binário ativado antes do último backup . Caso contrário, minhas condolências.
fonte