De acordo com a documentação de replicação do MySQL , é possível configurar a replicação de tabelas de origem InnoDB para tabelas de destino MyISAM. Infelizmente, a documentação tem pouco a dizer sobre desvantagens, implicações de consistência de dados (além do CASCADE corner case) e configurações recomendadas para habilitar tal configuração de replicação. Então, apenas algumas perguntas me vêm à mente em relação a essa configuração:
- a replicação baseada em instrução é preferida à variante baseada em linha ou vice-versa?
- o lado do InnoDB ou do MyISAM precisa de algumas configurações específicas para que a consistência dos dados não seja interrompida por si só como resultado da atividade de replicação "normal"?
- as execuções DDL no mestre são tratadas no escravo de maneira sã?
- como eu impediria que uma
ALTER TABLE blah ENGINE=InnoDB
instrução executada no mestre se propagasse para o escravo? - Existe uma maneira recomendada de configurar essa configuração "dividida"? Eu poderia pensar em um direto
ALTER TABLE blah ENGINE=MyISAM
no escravo, isso é viável? - quaisquer outras advertências que se deva saber?
Vou responder a cada pergunta da seguinte forma:
Se você estiver replicando para um escravo com todas as tabelas MyISAM, baseado em instrução é mais sensato porque a instrução SQL seria mais compacta para registrar e enviar.
Se o Escravo tiver todo o InnoDB, baseado em linha é melhor por causa das alterações granulares. Apenas esteja disposto a viver com logs binários inchados.
A consistência dos dados sai de cena com o MyISAM. Medidas para replicação segura sempre caem a favor do InnoDB. O MySQL 5.6 oferece suporte ao armazenamento de arquivo de log e posição em uma tabela InnoDB.
Sim
Execute assim:
Sim, já recomendei isso antes: posso ter um mestre InnoDB e escravos MyISAM com texto completo para pesquisa?
Todas as advertências necessárias estão neste post: Usando MyISAM para leitura e InnoDB para gravação de dados