Ir ao conteúdo
  • Cadastre-se

Conflito de Backups (Mysql) em servidores diferentes, mas com mesmo sistema.


omizocles

Posts recomendados

Estou com a seguinte situação, tenho um sistema via intranet pronto utilizando PHP com Mysql com 4 tabelas sendo que 3 delas estão relacionadas com relacionamento 1:1 a uma principal pelo campos ID da seguinte forma.

[tb_estudante]

cod_estudante

id_inscricao

id_termo

id_questionario

[tb_inscricao]

id_inscricao

campoA

campoB

etc.

[tb_termo]

id_termo

campoA

campoB

etc.

[tb_questionario]

id_questionario

campoA

campoB

etc.

Neste sistema, tenho mais de 400 cadastros, só que ocorreu uma situação onde estou sem saída. Será cadastrado separado da base normal, clientes que estão em outras duas cidades, onde estas não a uma comunicação online disponível(cidades do interior), onde a solução foi o envio de dois pcs como servidores para realizarem os cadastros e retornarem ao servidor principal como backup.

Mas ai é onde se encontra o problema. Como os campos ID são auto_increment(inclusive os que estão relacionados), ao realizar o backup ocorre conflitos com a base que esta no server principal e a base que foi enviada as outras cidades. E ficaria inviável editar o backup manualmente.

Estudei as 3 formas de backup do Mysql e elas não atenderam e minha situação

INSERT(inseri novos dados mas se um ID de algum campo já existir, encerra o backup e mesmo usando a opção para ignorar erros, os dados em conflito não será enviado ao banco)

UPDATE(Atualiza os dados mas não adiciona os novos estudantes)

REPLACE(Atualiza e Insere novo dados mas se já existir um ID igual no banco este substituirá pelo novo e removera o que estava)

Se houver alguém experiente em banco de dados, qual seria a solução para esta situação.

Link para o comentário
Compartilhar em outros sites

nao da pra simplesmente usar o exportar do phpmyadmin?

ja tentou usar mysql_dump ?

Olá, tentei exatamente pelo phpmyadmin mas nenhuma das maneira deu certo, pelo mysql_dump usando o INTO OUTFILE tambem não ajudou, pois o problema esta nos ID gerados pelos autoincrement que vai bater com a base principal e ainda estão relacionados com outras tabelas.

Acho que é a estrutura de como eu fiz o banco que não esta preparada para este tipo de situação, nunca imaginei que precisaria estar em servidores separados, acho que depois dessa não faço mais associações de chave estrangeira via ID com auto_increment e sim com códigos aleatórios, estava procurando uma solução mas ainda não vi uma luz, acho que o jeito mesmo será fazer 2 bases separadas se forem feitos cadastros nestas cidades, pelo menos por enquanto. Mas se alguém tiver alguma ideia melhor? Seria uma ajuda?

Link para o comentário
Compartilhar em outros sites

  • Moderador

Cara, isso é bem estranho .. o phpmyadmin nunca da problemas se usar o dump dele mesmo.

talvez suas tabelas estejam mal relacionadas isso sim. porque é perfeitamente normal associar uma ID a uma chava estrangeira... isso é o básico de relacionamentos com tabelas do tipo INNODB.

veja se você nao relacionou errado ( digo ao contrario) a FK na PK ao invés de PK na FK.

meu phpmyadmin funciona tranquilamente com os autoincremente.. meu banco de dados tem aproximadamente 30 tabelas. eu criei uma funçao que usa o mysql_dump .. ele cria o dump mas dá erro nas tabelas.. ele nao segue a ordem e tenta criar relacionamentos antes de criar as tabelas..

isso usando o programa do mysql_dump. agora utilizando o phpmyadmin.. funciona perfeitamente. reveja seu banco amigo.. nao acho que precisa criar dois bancos separados.

Link para o comentário
Compartilhar em outros sites

Cara, isso é bem estranho .. o phpmyadmin nunca da problemas se usar o dump dele mesmo.

talvez suas tabelas estejam mal relacionadas isso sim. porque é perfeitamente normal associar uma ID a uma chava estrangeira... isso é o básico de relacionamentos com tabelas do tipo INNODB.

veja se você nao relacionou errado ( digo ao contrario) a FK na PK ao invés de PK na FK.

meu phpmyadmin funciona tranquilamente com os autoincremente.. meu banco de dados tem aproximadamente 30 tabelas. eu criei uma funçao que usa o mysql_dump .. ele cria o dump mas dá erro nas tabelas.. ele nao segue a ordem e tenta criar relacionamentos antes de criar as tabelas..

isso usando o programa do mysql_dump. agora utilizando o phpmyadmin.. funciona perfeitamente. reveja seu banco amigo.. nao acho que precisa criar dois bancos separados.

Entendi sua posição, deixa eu ver se consigo exemplificar onde ocorreria o problema comigo, porque é um pouco direrente.

Tenho uma Tabela tb_estudantes da seguinte forma:

[tb_estudantes]

cod_estudante PK

id_inscricao FK

id_termo FK

id_questionario FK

e esta esta povoada(note que a PK de estudante é um código e não ha este problema):

cod | id_inscricao | id_termo | id_questionario |

r45t | 1 | 1 | 1 |

rg5r | 2 | 2 | 2 |

d55t | 3 | 4 | 3 |

...

fg56 | 120 | 121 | 119 |

suas tabelas relacionadas estão da mesma forma citando com exemplo a inscricao:

[tb_inscricao]

id_inscricao PK

campoA

campoB

etc.

1 | joao | neto | 43 | ...

2 | maria | silva | 21 | ...

3 | jose | silva | 32 | ...

...

120 | jean | neto | 25 | ...

estes dados estão na base principal aqui na capital por exemplo, mas se eles forem para a outras cidades no interior deletaríamos todos estes candidatos deixados os dados zerados e permanecendo somente estrutura e iniciaria do auto increment onde parou:

(cadastro no interior)

[tb_estudante] gr31 | 121 | 122 | 120 |

[tb_inscricao] 121 | joana | castro | 23 | ...

só que na base da capital não ficaria parada e tb poderia haver cadastros e ocorreria a seguinte situação aqui nesta base:

(cadastro na capital)

[tb_estudante] try5 | 121 | 122 | 120 |

[tb_inscricao] 121 | daniel | neto | 42 | ...

quando eu voltar a base que esta na outra cidade, haverá um conflito destes IDs. na tb_inscricao entre:

[tb_inscricao] 121 | joana | castro | 23 | ... (da cidade do interior)

[tb_inscricao] 121 | daniel | neto | 42 | ... (da capital)

Até pensei em colocar manualmente null no campo ID para ele auto_incrementar de onde parou, mas tira o relacionamento com a tb_estudante.

Espero ter colocado de uma forma que de para entender o que esta acontecendo.

De uma forma ou de outra, farei o teste dessa forma pelo phpmyadmin para ver se ele vai ajustar os IDs destes campos, e colocarei o resultado.

Link para o comentário
Compartilhar em outros sites

  • Moderador

relendo mais seu problema.. você tem ai um grande pepino mesmo. e com certeza causa inconsistencia de dados e confitos pois estas usando duas base de dados diferentes.

acho q nesse caso sinceramente nao há o que fazer, senao entrar com os dados do backup manualmente um por um.. na sua base principal para seguir a numeraçao do autoincrement.

porque o correto mesmo seria, o pc no interior acessar sua base de dados principal e armazenar direto seguindo assim a ordem.

mas como você ta usando 2 bancos de dados separados... a inserçao nos dois bancos começariam do 1.. e quando gerasse um backup do interior.. vai dar inconsistencia de registros.

uma possivel solução... (tentativa) pode ser uma definiçao de um valor inicial do autoincrement da base do interior.. começando a partir do ultimo registro da base principal.

mas isso pode causar outro problema também, se alguem inserir um registro na base principal, sua base do interior ja vai ficar desatualizada com o final do registro da base principal. então por isso que eu digo que é só uma tentativa.

agora se sua base principal nao terá registros inseridos, antes das inserçoes da base do interior... isso pode dar certo.

então tente isto na base do interior:

ALTER TABLE nome_da_tabela AUTO_INCREMENT=valor do ultimo registro da base principal

exemplo:

se na base principal terminou no registro 400, você começa seu auto increment na base do interior em 401

ALTER TABLE nome_da_tabela AUTO_INCREMENT=401

então ai o primeiro registro da base interior começará em 401

Link para o comentário
Compartilhar em outros sites

Isso mesmo.

No server que vai para o interior, apenas alterarei o auto_increment para

ALTER TABLE tb_inscricao,tb_termo,tb_questionario AUTO_INCREMENT = 1000

e nestes servers ele iniciaram em 1000 pra frente e eu poderia restaurar o backup sem problemas e durará até eu fazer as correções.

No server da capital se por via da dúvidas houvesse inserção de registro ele iniciaria do 400 para frente e quando retornasse o outro backup não haveria conflito.

Uma luz no fim do túnel. Obrigado mesmo.

Link para o comentário
Compartilhar em outros sites

Arquivado

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

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!