Replicando um banco de dados MySQL remoto para o MS SQL Server 2008

10

Quero replicar o conteúdo de um banco de dados MySQL para um banco de dados MS SQL Server 2008.

Isso é possível? Alguém pode descrever as etapas necessárias para conseguir isso?

Obrigado.

Jimmy Collins
fonte

Respostas:

9

Pessoalmente, eu usaria o método MS SQL versus o push do método MySQL. Por quê? Bem, o Windows tem drivers ODBC MySQL de 32 bits e 64 bits prontos para usar, e a configuração de um servidor vinculado é trivial. Eu tenho muitos servidores MySQL vinculados ao MS SQL. Além disso, a conexão com o MS SQL a partir do linux / unix nem sempre é ótima e você geralmente não é capaz de usar todos os recursos. O FreeTDS tem limitações; você pode atingi-los mais cedo ou mais tarde; por que não ignorá-lo? Isso tudo pressupõe que você esteja executando o MySQL no * nix. Caso contrário, ele fica um pouco mais próximo de 50/50, mas eu ainda escolheria extrair do MS SQL, pois parece que não é o banco de dados "ativo", portanto, colocar a carga nele para qualquer ETL ou processamento é mais ideal. A solução GoldenGate parece interessante, mas tenho certeza de que não é gratuita.

Considerando que eu configurei esse tipo de cenário com os bancos de dados MySQL e Oracle replicando para o MS SQL, fornecerei algumas dicas que funcionaram melhor para mim:

  1. Se você puder, faça o seu melhor para determinar como garantir que você esteja apenas introduzindo alterações delta. Os comandos de mesclagem podem ajudar nisso. Truncar uma tabela e depois inseri-la novamente incha seu log, usa a largura de banda da rede e geralmente desperdiça tempo.
  2. Se estiver lidando com muitos dados, não se esqueça de interromper as transações para não exigir um arquivo de log massivo. Use confirmações ou pontos de verificação explícitos quando tiver atingido uma etapa da qual sabe que não precisará reverter.
  3. Se o MSSQL db for apenas para geração de relatórios, o ETL trabalha lá para não afetar o servidor MySQL. Use um banco de dados de teste ou esquema + grupo de arquivos para facilitar as coisas.
  4. Divida os dados importados em etapas. Isso facilita o reinício da importação onde houve falha e / ou solução de problemas. Uma abordagem de tudo ou nada se torna irritante rapidamente.
  5. Use variáveis ​​sempre que possível para ajudar o banco de dados remoto com planos de consulta e uso do índice. Preste atenção também em que tipo de isolamento de transação você está na caixa do host e qual o impacto que as consultas de "replicação" terão. Você não deseja bloquear gravadores em um banco de dados ao vivo se estiver apenas retirando dados para relatórios ou uso de sandbox.

Espero que as dicas ajudem!

AndrewSQL
fonte
4

A mesma pergunta foi abordada no StackOverflow aqui: Replicação do MySQL para MSSQL .

Parece que existem algumas soluções alternativas, mas não é uma solução muito fácil.

Eu acredito que você definitivamente deveria tentar criar um pacote SSIS para importar os dados necessários do MySQL DB para o MSSQL DB. O SSIS permite importar dados de várias fontes. Em seguida, você poderá agendar o pacote usando o agendador de tarefas do Windows ou trabalhos sql.

Marian
fonte
3

Se por replicação você quer dizer remessa de logs ou algo do tipo, acredito que não tenha sorte. No entanto, você certamente pode configurar um banco de dados MySQL como um servidor vinculado e executar seu próprio esquema de replicação. O mais simples é apenas fazer instantâneos periódicos de todas as tabelas usando instruções truncadas e de inserção. Adicione complexidade conforme suas necessidades.

Larry Smithmier
fonte
Quero dizer, quero que uma tarefa agendada execute e copie todo o conteúdo do msqldb para o sql server 2008 db uma vez por semana ou mais - isso é possível?
Jimmy Collins
11
Lembre-se de que truncar e extrair todos os dados de cada vez pode ser muito lento, dependendo da quantidade de dados envolvidos, da latência da rede etc. Definitivamente, não é o caminho a seguir se você tiver links de rede pequenos ou lentos entre os dois bancos de dados. Eu sempre tento criar um método que me permita extrair deltas.
AndrewSQL 19/01
11
Eu concordo, deltas são o caminho a percorrer. Não conheço MySQL suficiente para falar com gatilhos e bits de linha sujos, mas tenho certeza de que algo pode ser configurado. No lado do SQL Server, o agendamento de um trabalho é direto.
Larry Smithmier
3

Você pode usar o GoldenGate para MySQL e MS SQL para fazer isso. Você simplesmente instalaria o produto GoldenGate em cada lado e continuaria como para uma replicação homogênea.

Como alternativa, para uma replicação de "instantâneo", você pode usar um script Python (ou similar) para simplesmente conectar-se a ambas as fontes de dados (usando o UnixODBC e o FreeTDS para conectar-se ao MS SQL), percorrer as tabelas SELECTde um lado, para cada linha INSERTno outro. Como o MSSQL possui transações e é o seu destino, você pode iniciar uma transação, DELETEtudo em todas as tabelas, fazer a cópia COMMITe ela aparecerá instantaneamente no que diz respeito aos usuários conectados no destino, não haverá inconsistências (a menos que existam) na fonte, é claro).

Gaius
fonte
Eu não sabia que isso era algo que você poderia fazer com o GoldenDate. Vou ter que ler mais sobre isso; obrigado por compartilhar!
AndrewSQL 19/01
Agora, a oracle fornece suporte para este produto. A Oracle adquiriu a GoldenGate. Agora, este produto está sob produtos da Oracle.