Sincronização de banco de dados

27 views
Skip to first unread message

Bruno M.

unread,
Feb 14, 2020, 6:28:19 AM2/14/20
to php-brasil
Bom dia pessoal.

Tenho um sistema de orçamento em que os vendedores fazem em cidades normalmente sem internet, então instalei o xamp.

O problema que agora serão varios vendedores e o cliente me pediu para no inicio do dia o sistema carregar para o banco de dados local o banco atualizado e no final do dia ele sincronizar os dados ou alterados ou novos.

Qual a melhor forma para eu fazer essa sincronização?

DGmike

unread,
Feb 14, 2020, 11:56:55 AM2/14/20
to php-brasil
Você pode optar por dump do banco de dados de manhã e executá-lo em cada uma das máquinas locais.

> mysqldump -h endereco.ou.ip.do.servidor.principal -u usuario -p'senha' tabela > dump.sql

> mysql -u usuario -p'senha' --execute "DROP DATABASE banco"
> mysql -u usuario -p'senha' --execute "CREATE DATABASE banco"
> mysql -u usuario -p'senha' < dump.sql

No exemplo acima, tudo é executado no powershell do windows de cada máquina. Ele cria um arquivo dump.sql contendo todo o conteùdo do banco de dados principal, depois ele apaga o banco de dados, cria de novo e instala o dump inteiro. Você pode ter problemas de rede ao executar isso, então, faça um dump local de cada màquina antes de rodar isso aí. Tambem, lembre-se que o dump vai ficar cada vez maior a cada dia, deixando a solução cada vez mais lenta. Se vocë estiver confortàvel com isso...

Agora, para "trazer" de volta, talvez você precise fazer algo mais elaborado já que cada um dos clientes traz informações diferentes cujos IDs podem se repetir causando problemas sérios.

Recomendaria esquecer que existe ID auto_increment e não exibir esse dado para os usuários, assim eles não sabem da existencia dessa coluna, logo não conseguem acessar um recurso de outra pessoa. Ao invés disse usa algum hash em outra coluna como <? md5(time() . $tabela . $usuario["login_unico"]); ?>, daí você pode trabalhar com um script de importação.

Primeiro, exporta os dados numa tabela .cvs (cada linha tem os dados de todas as tabelas relacionadas) em cada um das màquinas e manda executar o script de importação na máquina principal que vai ler o arquivo .csv que você acabou de enviar.

Isso é só uma maneira... existe uma configuração no mysql na qual você define um auto_increment diferente, assim você pode, talvez, garantir que nenhum dado irá colidir na hora de trazer os inserts necessários.


Não sei se ficou claro. Qualquer coisa, grita.

Everton Amaral Pereira

unread,
Feb 15, 2020, 4:02:46 PM2/15/20
to php-b...@googlegroups.com
Não faça isso, pelamordedeus!

Se são vários vendedores, cada um com uma cópia do sistema, o que tu precisa fazer é uma rotina para exportar os dados de cada cópia para um servidor centralizado.

Poderia ter um botão onde o vendedor clicaria para exportar as vendas no final do dia, ou quando ele tiver acesso à internet.

E uma vez que uma determinada venda foi exportada, ele não poderia mais atualizar, pra não perder a sincronia dos dados.

Mas não tente trabalhar direto com dumps dos bancos de dados. Nem fazer scripts de importação. Isso é uma solução mais rápida no curto prazo, mas que vai trazer problemas depois.

Outro problema que essas múltiplas cópias do sistema pode trazer é de atualização. Tu cria uma funcionalidade nova ou faz uma correção de bug, e os usuários podem ficar com uma versão desatualizada.


--
Você recebeu essa mensagem porque está inscrito no grupo "php-brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para php-brasil+...@googlegroups.com.
Para ver essa discussão na Web, acesse https://groups.google.com/d/msgid/php-brasil/83cb08f2-73d3-4ecc-8814-2f4b0bcc15fc%40googlegroups.com.


--
Reply all
Reply to author
Forward
0 new messages