Pergunta

Eu tenho um servidor de teste que usa dados de um banco de dados de teste. Quando estou teste feito, ele é movido para o banco de dados ao vivo.

O problema é, eu tenho outros projetos que contam com os dados agora em produção, então eu tenho que executar um script que agarra os dados das tabelas que eu preciso, exclui os dados do teste DB e insere os dados do DB ao vivo.

I foram tentando descobrir uma maneira de melhorar este modelo. O problema não é tanto na migração, já que os dados só é atualizado uma vez ou duas vezes por semana (sem qualquer ação de minha parte). O problema é ter o lugar migração tomada apenas quando ele precisa. Eu gostaria de ter o meu script de migração incluem uma verificação rápida contra as mesas ao vivo e as tabelas de teste e, se necessário, fazer o movimento. Se não houve alterações, os quites script.

Desta forma, posso incluir o script de atualização em meus outros scripts e não precisa se preocupar se os dados estão em sincronia.

Eu não pode usar carimbos de tempo. Por um lado, eu não tenho controle sobre as mesas do lado ao vivo uma vez que ele vai viver, e também porque parece um bocado parvo a granel até as mesas mais para conviencience.

Eu tentei fazer um "SHOW TABLE STATUS DE livedb", mas porque as mesas são todos InnoDB, não há "Time Update", além disso, parece que o "Criar Time" era esta manhã, levando-me a acreditar que a banco de dados é feito o backup e re-criados diariamente.

Existe alguma outra propriedade na tabela que iria mostrar qual dos dois é mais recente? A "mais novo Data Row" talvez?

Foi útil?

Solução

Em resumo: Faça a actualização de primeira classe desenvolvimento-live em sua aplicação. Em vez de, dependendo do motor de banco de dados para fornecer-lhe as informações necessárias para que você possa tomar uma decisão (a atualização ou não a atualização ... que é a questão ), basta implementá-lo como parte de sua aplicação. Caso contrário, você está tentando encaixar um prego redondo em um buraco quadrado.

Sem saber o seu modelo de dados é, e sem entender nada do que o seu modelo de sincronização é, você tem algumas opções:

  1. Jogo chaves primárias contra banco de dados ao vivo vs. o banco de dados de teste. Quando o teste> IDs ao vivo, fazer uma atualização.
  2. Use timestamps em uma tabela para determinar se ele precisa ser atualizado
  3. Use o hash MD5 de uma tabela de banco de dados e modificação de data (UTC) para determinar se uma tabela foi alterada.

Para encurtar a história: a sincronização de banco de dados é muito difícil. Implementar uma solução que é específico para a sua aplicação. Não há uma solução "genérico" que irá funcionar em condições ideais.

Outras dicas

Se você tem um autoincrement em suas tabelas, você pode comparar os valores máximos de incremento automático para ver se eles são diferentes.

Mas a versão do mysql você está usando?

Ao invés de rolar seus próprios, você pode usar uma solução pré-existente para manter bancos de dados em sincronia. Eu já ouvi coisas boas sobre SJA do SQLyog (ver aqui ). Eu nunca usei isso sozinho, mas eu estive muito impressionado com seus outros programas.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top