Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Denilson Paiva

Sincronizar dados 2 tabelas com nomes diferentes e bancos diferentes.

Recommended Posts

Bom dia amigos.

 

é possível sincronizar dados de 2 tabelas com nomes diferentes em banco de dados diferentes mas os 2 sendo mysql?? pois tenho uma tabela(produto) de uma loja virtual que quero sincronizar com a tabela (prod) de sistema pdv sendo que os campos com nomes diferentes???

 

ou seja 2 bancos mysql (nomes diferentes), tabelas com nomes diferentes, mas que precisam compartilhar dos mesmos dados como: quantidade, valor etc.

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Procure por:

 

MySQL Federated Table, deva lhe dar uma luz e :clover:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só é possível usar uma federated table se a tabela for idêntica a table base. Então criar a federated também somente não seria suficiente.

 

Há algumas maneiras de fazer isso.

 

1. Na minha opinião a melhor solução seria uma replicação da tabela usando Replication do MySQL. É possível replicar somente uma tabela em vez de todo o banco de dados (--replicate-do-table). Depois na tabela replicada basta criar triggers para todas as DMLs para atualizar a sua tabela "produto". Caso segurança seja essencial nessa conexão, você pode usar SSL entre o Master e o Slave.

 

2. A outra maneira seria com a federated mesmo, em vez de criar as triggers na tabela sincronizada você criaria na tabela federated. Não sou muito fã de usar Federated porque a cada operação que você faz na tabela o servidor faz a conexão com o banco de dados. Isso consome muita rede e a performance é horrível, se a tabela é grande a performance é pobre até mesmo para servidores na mesma intranet com conexão de 1Gb. Além disso, já lí em alguns artigos que triggers em federated tables não funcionam da maneira que deveriam funcionar.

 

3. Uma última solução caso os dados não precisem ser atualizados em tempo real seria criar um script no servidor da loja virtual que conecta ao outro servidor para ler a tabela de tempos em tempos, se a tabela for grande seria necessário ter colunas timestamp (created_at e updated_at por exemplo) para não ter que selecionar a tabela inteira a cada execução do script.

 

 

Nenhuma dessas soluções são multi-direcionais, tabela B sincroniza com A, caso você altere um registro na tabela B, a tabela A não será atualizada, a menos que você crie triggers nessa tabela B para atualizar a tabela A (Na solução 1 é possível utilizar replicação multi-direcional para atualizar a tabela base).

Se ficar alguma dúvida só postar ae.

Abraços,

Érico

Compartilhar este post


Link para o post
Compartilhar em outros sites

Procure por:

 

MySQL Federated Table, deva lhe dar uma luz e :clover:

 

Opa. Mas as tabelas tem nomes de campos direferentes tipo: na tabela 1 o campo produto se chama "product" ta tabela 2 se chama "produtos_n". Daria certo??

Só é possível usar uma federated table se a tabela for idêntica a table base. Então criar a federated também somente não seria suficiente.

 

Há algumas maneiras de fazer isso.

 

1. Na minha opinião a melhor solução seria uma replicação da tabela usando Replication do MySQL. É possível replicar somente uma tabela em vez de todo o banco de dados (--replicate-do-table). Depois na tabela replicada basta criar triggers para todas as DMLs para atualizar a sua tabela "produto". Caso segurança seja essencial nessa conexão, você pode usar SSL entre o Master e o Slave.

 

2. A outra maneira seria com a federated mesmo, em vez de criar as triggers na tabela sincronizada você criaria na tabela federated. Não sou muito fã de usar Federated porque a cada operação que você faz na tabela o servidor faz a conexão com o banco de dados. Isso consome muita rede e a performance é horrível, se a tabela é grande a performance é pobre até mesmo para servidores na mesma intranet com conexão de 1Gb. Além disso, já lí em alguns artigos que triggers em federated tables não funcionam da maneira que deveriam funcionar.

 

3. Uma última solução caso os dados não precisem ser atualizados em tempo real seria criar um script no servidor da loja virtual que conecta ao outro servidor para ler a tabela de tempos em tempos, se a tabela for grande seria necessário ter colunas timestamp (created_at e updated_at por exemplo) para não ter que selecionar a tabela inteira a cada execução do script.

 

 

Nenhuma dessas soluções são multi-direcionais, tabela B sincroniza com A, caso você altere um registro na tabela B, a tabela A não será atualizada, a menos que você crie triggers nessa tabela B para atualizar a tabela A (Na solução 1 é possível utilizar replicação multi-direcional para atualizar a tabela base).

 

Se ficar alguma dúvida só postar ae.

 

Abraços,

 

Érico

 

Quero justamente replicar os dados de acho que umas 5 tabelas, mas, os campos de uma tem nomes diferentes, não são iguais. funcionaria??

 

tipo: na tabela 1 o campo produto se chama "product" ta tabela 2 se chama "produtos_n".

 

1 - Seria possivel?

2- Tem de ser em tempo real. O que você sugere?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Denilson,

Como eu expliquei na primeira solução, a replicação só irá copiar as tabelas para o segundo servidor, com tabelas e colunas iguais. Para sincronizar com a sua tabela que tem outro nome e outras colunas você deverá criar triggers na tabela replicada para a sua tabela ser atualizada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.