Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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.
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
>
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?
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.
Então a solução é o "triggers" ??? nunca usei... vou dar uma busca como utilizar... mas se tiver algum link para aprendizado posta ai... Obrigado.
Sim, replicação + triggers.
No manual explica tudo.
Procure por:
MySQL Federated Table, deva lhe dar uma luz e :clover: