Domanda

Ho un server di test che utilizza i dati da un database di prova. Quando ho finito il test, esso viene spostato nella banca dati dal vivo.

Il problema è, ho altri progetti che si basano sui dati attualmente in produzione, quindi devo eseguire uno script che prende i dati dalle tabelle di cui ho bisogno, cancella i dati nel DB di prova e inserisce i dati del DB dal vivo.

Ho cercato di capire un modo per migliorare questo modello. Il problema non è tanto nella migrazione, in quanto i dati solo ottiene aggiornate una o due volte a settimana (senza alcuna azione da parte mia). Il problema sta avendo luogo take migrazione solo quando è necessario. Vorrei avere il mio script di migrazione includono un rapido controllo contro i tavoli live e le tavole di prova e, se necessario, fare la mossa. Se non ci sono stati aggiornamenti, lo script si chiude.

In questo modo, posso includere lo script di aggiornamento in altri miei scritti e non si deve preoccupare se i dati sono sincronizzati.

Non riesco a usare i timestamp. Per uno, non ho alcun controllo sui tavoli sul lato dal vivo una volta che va in diretta, e anche perché mi sembra un po 'stupido per ammassare le tabelle di più per conviencience.

Ho provato a fare un "SHOW TABLE STATUS DA livedb", ma perché i tavoli sono tutti InnoDB, non esiste un "Tempo di aggiornamento", più, sembra che la "Create Time" è stato questa mattina, mi porta a credere che la banca dati viene eseguito il backup e ricreato al giorno.

C'è qualche altra proprietà nella tabella che mostrano quale dei due è più recente? A "i più nuovi Data Row", forse?

È stato utile?

Soluzione

In breve: Fare l'aggiornamento di sviluppo-live di prima classe nella vostra applicazione. Invece di funzione del motore di database per fornire le informazioni necessarie per consentire di prendere una decisione (per aggiornare o non aggiornare ... questo è il problema ), basta implementare come parte di la tua applicazione. In caso contrario, si sta cercando di inserire un piolo rotondo in un buco quadrato.

Senza sapere che cosa il vostro modello di dati è, e senza capire a tutti ciò che il vostro modello di sincronizzazione è, avete alcune opzioni:

  1. Incontro chiavi primarie contro database attivo contro il database di test. Quando prova> Live ID, fare un aggiornamento.
  2. Usa i timestamp in una tabella per determinare se ha bisogno di essere aggiornato
  3. Utilizzare l'hash MD5 di una tabella di database e data di modifica (UTC) per determinare se una tabella è cambiato.

Per farla breve: sincronizzazione del database è molto difficile. Implementare una soluzione che è specifico per l'applicazione. Non esiste una soluzione "generico" che lavorerà in posizione ideale.

Altri suggerimenti

Se avete un AutoIncrement nelle tabelle, è possibile confrontare i valori massimi autoincremento per vedere se sono diversi.

Ma quale versione di MySQL stai usando?

Invece di posizionare il proprio, si potrebbe utilizzare una soluzione preesistente per mantenere i database in sincronia. Ho sentito parlare bene di SJA di SQLyog (vedi qui ). Non ho mai usato io stesso, ma sono stato molto impressionato con i loro altri programmi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top