Confronta due database MySQL

Attualmente sto sviluppando un’applicazione utilizzando un database MySQL.

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

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

Mentre attualmente semplicemente scartando il precedente database del server di test va bene, poiché il test inizia a immettere dati di test, potrebbe risultare un po ‘complicato.
Lo stesso anche se più così accadrà di nuovo più tardi nella produzione …

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


Strumenti citati nelle risposte:

  • Schema e dati MySQL di Red-Gate Confronta (commerciale)
  • Maatkit (ora Percona)
  • liquibase
  • Rospo
  • Nob Hill Database Compare (Commerciale)
  • MySQL diff
  • SQL EDT (commerciale)

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

Saltando i commenti si evitano differenze insignificanti come il tempo in cui è stato eseguito il comando mysqldump. Utilizzando il --skip-extended-insert assicurati che ogni riga sia inserita con la propria istruzione di inserimento. Ciò elimina la situazione in cui un singolo record nuovo o modificato può causare una reazione a catena in tutte le future istruzioni di inserimento. Esecuzione con queste opzioni produce dump più grandi senza commenti, quindi probabilmente non è qualcosa che si vuole fare in produzione, ma per lo sviluppo dovrebbe andare bene. Ho messo esempi dei comandi che uso 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 

Toad for MySQL ha caratteristiche di confronto di dati e schemi, e credo che creerà anche uno script di sincronizzazione. Meglio di tutti, è freeware.

Io uso un software chiamato Navicat per:

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

Costa solo soldi, è solo Windows e Mac, e ha un’interfaccia utente sbalorditiva, ma mi piace.

C’è uno Schema Synchronization Tool in SQLyog (commerciale) che genera SQL per sincronizzare due database.

inserisci la descrizione dell'immagine qui

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

Ci sono molti modi certamente, ma nel mio caso preferisco il comando dump e diff. Quindi ecco uno script basato sul commento di Jared:

 #!/bin/sh echo "Usage: dbdiff [user1:[email protected]] [user2:[email protected]] [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 è benvenuto 🙂

dbSolo, è pagato 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é consente di confrontare i database locali con i database remoti (tramite SSH), quindi non è necessario scaricare dati.

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

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

Ad esempio, se si modifica solo il tipo di una colonna, uno strumento automatico può facilmente indovinare come ricrearlo. Ma se si sposta anche la colonna, si rinomina e si aggiungono o si rimuovono altre colonne, il meglio che qualsiasi pacchetto software può fare è indovinare cosa è successo probabilmente. 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 eseguirle in uno script di aggiornamento o migrazione). È più noioso, ma manterrà i tuoi dati al sicuro. E quando inizi a consentire agli utenti finali di accedere al tuo sito, realizzerai davvero modifiche costanti al database?

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

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

C’è un altro strumento mysql-diff della riga di comando open source:

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

C’è uno strumento utile scritto usando perl chiamato Maatkit . Tra l’altro ha diversi strumenti per il confronto e la sincronizzazione dei database.

Confronta SQL con RedGate http://www.red-gate.com/products/SQL_Compare/index.htm

DBDeploy per aiutare nella gestione delle modifiche del database in modo automatizzato http://dbdeploy.com/

Per quanto mi riguarda, inizierei con il dumping di entrambi i database e la diffusione dei dump, ma se si desidera generare automaticamente gli script di merge, si vorrà ottenere uno strumento reale.

Una semplice ricerca su Google ha mostrato i seguenti strumenti:

  • MySQL Workbench , disponibile nelle varianti Community (OSS) e Commerciale.
  • Confronto con il database di Nob Hill , disponibile gratuitamente per MySQL.
  • Un elenco di altri strumenti di confronto SQL.

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

dbForge Data Compare per MySQL

Dopo ore di ricerche sul web per uno strumento semplice, mi sono reso conto che non avevo l’aspetto di Ubuntu Software Center. Ecco una soluzione gratuita che ho trovato: http://torasql.com/ Essi sostengono di avere anche una versione per Windows, ma la sto usando solo con Ubuntu.

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

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

Componenti eZ – DatabaseSchema consente di:

    . Crea / Salva una definizione dello schema del database;
    . Confronta schemi di database;
    . Generare query di sincronizzazione;

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

vantaggi:

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

svantaggi:

  • non sincronizza la lunghezza con valori minimi
  • non sincronizza correttamente i nomi degli indici
  • non sincronizza i commenti

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

Per la prima parte della domanda, faccio solo una discarica di entrambi e li diff. Non sono sicuro di mysql, ma postgres pg_dump ha un comando per scaricare semplicemente lo schema senza il contenuto della tabella, così puoi vedere se hai cambiato lo schema.

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

Originariamente avevamo deciso di creare il nostro strumento da zero perché mentre sul mercato ci sono altri prodotti simili, nessuno di questi ha il compito giusto. È abbastanza facile mostrarti le differenze tra i database. È piuttosto un altro per creare un database come l’altro. Una migrazione uniforms, sia di schema che di dati, è sempre stata una sfida. Bene, l’abbiamo raggiunto qui.
Siamo così sicuri che potrebbe fornire una migrazione senza problemi, che in caso contrario – se gli script di migrazione che genera non sono sufficientemente leggibili o non funzioneranno per te, e non possiamo risolverlo in cinque giorni lavorativi – otterrai la tua copia gratuita!

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