Domanda

Attualmente sto sviluppando un'applicazione usando un database MySQL.

La struttura del database è ancora in evoluzione e cambia mentre lo sviluppo procede (cambio la mia copia locale, lasciando solo quella sul server di test).

C'è un modo per confrontare le due istanze del database per vedere se ci sono state delle modifiche?

Mentre attualmente è sufficiente scartare il database del server di test precedente, poiché i test iniziano a immettere i dati di test, potrebbe essere un po 'complicato.
Lo stesso, tuttavia, accadrà di nuovo più avanti nella produzione ...

Esiste un modo semplice per apportare in modo incrementale modifiche al database di produzione, preferibilmente creando automaticamente uno script per modificarlo?


Strumenti citati nelle risposte:

È stato utile?

Soluzione

Se stai lavorando con database di piccole dimensioni, ho scoperto di eseguire mysqldump su entrambi i database con le opzioni --skip-commenti e --skip-extended-insert per generare script SQL, quindi eseguire diff sugli script SQL funziona abbastanza bene.

Saltando i commenti si evitano differenze insignificanti come il tempo in cui è stato eseguito il comando mysqldump. Usando il comando --skip-extended-insert ti assicuri che ogni riga sia inserita con la sua istruzione insert. Ciò elimina la situazione in cui un singolo record nuovo o modificato può causare una reazione a catena in tutte le future istruzioni insert. L'esecuzione con queste opzioni produce dump più grandi senza commenti, quindi questo probabilmente non è qualcosa che si desidera fare nell'uso della produzione, ma per lo sviluppo dovrebbe andare bene. Ho messo esempi dei comandi che utilizzo di seguito:

mysqldump --skip-comments --skip-extended-insert -u root -p dbName1>file1.sql
mysqldump --skip-comments --skip-extended-insert -u root -p dbName2>file2.sql
diff file1.sql file2.sql

Altri suggerimenti

Toad for MySQL ha funzionalità di confronto di dati e schemi, e credo che lo farà persino creare uno script di sincronizzazione. Soprattutto, è freeware.

Uso un software chiamato Navicat per:

  • Sincronizza i database Live con i miei database di test.
  • Mostra le differenze tra i due database.

Costa denaro, è solo Windows e Mac, e ha una UI bizzarra, ma mi piace.

Esiste uno strumento di sincronizzazione dello schema in SQLyog (commerciale) che genera SQL per la sincronizzazione di due database.

inserisci qui la descrizione dell'immagine

Dall'elenco di confronto delle funzionalità ... MySQL Workbench offre Schema Diff e Schema Synchronization nella loro edizione della community.

Esistono certamente molti modi, ma nel mio caso preferisco il comando dump e diff. Quindi ecco una sceneggiatura basata sul commento di Jared:

#!/bin/sh

echo "Usage: dbdiff [user1:pass1@dbname1] [user2:pass2@dbname2] [ignore_table1:ignore_table2...]"

dump () {
  up=${1%%@*}; user=${up%%:*}; pass=${up##*:}; dbname=${1##*@};
  mysqldump --opt --compact --skip-extended-insert -u $user -p$pass $dbname $table > $2
}

rm -f /tmp/db.diff

# Compare
up=${1%%@*}; user=${up%%:*}; pass=${up##*:}; dbname=${1##*@};
for table in `mysql -u $user -p$pass $dbname -N -e "show tables" --batch`; do
  if [ "`echo $3 | grep $table`" = "" ]; then
    echo "Comparing '$table'..."
    dump $1 /tmp/file1.sql
    dump $2 /tmp/file2.sql
    diff -up /tmp/file1.sql /tmp/file2.sql >> /tmp/db.diff
  else
    echo "Ignored '$table'..."
  fi
done
less /tmp/db.diff
rm -f /tmp/file1.sql /tmp/file2.sql

Il feedback è il benvenuto :)

dbSolo, è a pagamento ma questa funzione potrebbe essere quella che stai cercando http://www.dbsolo.com/help/compare.html

Funziona con Oracle, Microsoft SQL Server, Sybase, DB2, Solid, PostgreSQL, H2 e MySQL alt text

Se hai solo bisogno di confrontare schemi (non dati) e avere accesso a Perl, mysqldiff potrebbe funzionare. L'ho usato perché ti consente di confrontare i database locali con i database remoti (tramite SSH), quindi non devi preoccuparti di scaricare alcun dato.

http://adamspiers.org/computing/mysqldiff/

Tenterà di generare query SQL per sincronizzare due database, ma in realtà non mi fido di esso (o di alcuno strumento). Per quanto ne so, non esiste un modo affidabile al 100% per decodificare le modifiche necessarie per convertire uno schema di database in un altro, soprattutto quando sono state apportate più modifiche.

Ad esempio, se si modifica solo il tipo di una colonna, uno strumento automatizzato può facilmente indovinare come ricrearlo. Ma se si sposta anche la colonna, la si rinomina e si aggiungono o si rimuovono altre colonne, il meglio che un pacchetto software può fare è indovinare cosa probabilmente è successo. E potresti finire per perdere dati.

Suggerirei di tenere traccia di tutte le modifiche dello schema apportate al server di sviluppo, quindi di eseguire tali istruzioni manualmente sul server live (o di inserirle in uno script di aggiornamento o migrazione). È più noioso, ma manterrà i tuoi dati al sicuro. E quando inizierai a consentire l'accesso degli utenti finali al tuo sito, effettuerai davvero costanti modifiche al database?

Dai un'occhiata a http://www.liquibase.org/

check: http://schemasync.org/ lo strumento schemasync funziona per me, è uno strumento da riga di comando che funziona facilmente nella riga di comando di Linux

Esiste un altro strumento mysql-diff da riga di comando open source:

http://bitbucket.org/stepancheg/mysql-diff/

Esiste un utile strumento scritto usando perl chiamato Maatkit . Ha diversi strumenti di confronto e sincronizzazione del database tra le altre cose.

SQL Compare di RedGate http://www.red-gate.com/products/SQL_Compare/index. htm

DBDeploy per aiutare con la gestione delle modifiche al database in modo automatizzato http://dbdeploy.com/

Per quanto mi riguarda, inizierei con il dumping di entrambi i database e la differenziazione dei dump, ma se si desidera creare script di unione generati automaticamente, si vorrà ottenere uno strumento reale.

Una semplice Ricerca Google ha messo a punto i seguenti strumenti:

Dai un'occhiata a dbForge Data Compare for MySQL . È uno shareware con un periodo di prova gratuito di 30 giorni. È uno strumento GUI MySQL veloce per il confronto e la sincronizzazione dei dati, la gestione delle differenze di dati e la sincronizzazione personalizzabile.

dbForge Data Compare for MySQL

Dopo ore alla ricerca di strumenti semplici sul web, mi sono reso conto di non cercare Ubuntu Software Center. Ecco una soluzione gratuita che ho trovato: http://torasql.com/ Sostengono di avere anche una versione per Windows, ma la sto usando solo su Ubuntu.

Modifica: 2015-feb-05 Se hai bisogno dello strumento Windows, TOAD è perfetto e gratuito: http://software.dell.com/products/toad-for-mysql/

La libreria di componenti apache zeta è una libreria di uso generico di componenti liberamente accoppiati per lo sviluppo di applicazioni basate su PHP 5.

Componenti eZ - DatabaseSchema ti consente di:

   .Create/Save a database schema definition;
   .Compare database schemas;
   .Generate synchronization queries;

Puoi controllare il tutorial qui: http://incubator.apache.org/zetacomponents/documentation/trunk/DatabaseSchema /tutorial.html

Strumento di confronto e sincronizzazione molto facile da usare:
   Comparatore di database     http://www.clevercomponents.com/products/dbcomparer/index.asp

I vantaggi:

  • veloce
  • facile da usare
  • facili da selezionare le modifiche da applicare

Svantaggi:

  • non sincronizza la lunghezza con minuscoli ints
  • non sincronizza correttamente i nomi degli indici
  • non sincronizza i commenti

Penso che Navicat per MySQL sarà utile in questo caso . Supporta la sincronizzazione di dati e strutture per MySQL. inserisci qui la descrizione dell'immagine

Per la prima parte della domanda, faccio semplicemente un dump di entrambi e li diffondo. Non sono sicuro di mysql, ma postgres pg_dump ha un comando per scaricare lo schema senza il contenuto della tabella, quindi puoi vedere se hai modificato lo schema.

Sto lavorando con il team di marketing di Nob Hill, volevo dirti che sarò felice di ascoltare le tue domande, i tuoi suggerimenti o qualsiasi altra cosa, non esitare a contattarmi.

Inizialmente abbiamo deciso di creare il nostro strumento da zero perché mentre ci sono altri prodotti simili sul mercato, nessuno di loro fa il lavoro giusto. È abbastanza facile mostrarti le differenze tra i database. È piuttosto un altro creare un database come l'altro. La migrazione regolare, sia dello schema che dei dati, è sempre stata una sfida. Bene, l'abbiamo raggiunto qui.
 Siamo così fiduciosi che potrebbe fornirti una migrazione senza problemi, se non lo fa - se gli script di migrazione che genera non sono abbastanza leggibili o non funzionano per te e non possiamo risolverlo in cinque giorni lavorativi - otterrai la tua copia gratuita!

http://www.nobhillsoft.com/NHDBCompare.aspx

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