MySql - Confronto di schemi e tabelle di due db
Esistono vari modi di effettuare il confronto tra due schemi, e molti di questi fanno riferimento
a dei prodotti software, come ad esempio il Toad, SQLyog o DbForge.
QUi vi voglio invece illustrare due metodi, che sono carenti della parte grafica, ma che
possono essere utilizzati a prescindere dal software e dall'ambiente sul quale si lavora (ad esempio,
Toad non e' previsto per sistemi Ubuntu)
Metodo 1: mysqldiff
mysqldiff e' uno script PERL che permette di effettuare il confronto tra due strutture (schema o tabelle) di due dabase MySql. Il risultato
della differenza e' una sequenza di comandi MySQl per permettere di trasformare la struttura del primo database in maniera identica
rispetto al secondo.
Prima di procedere con una breve panoramica sui comandi principali, vi invito a consultare il manuale ufficiale
Qui mi limito ad elencarvi alcuni esempi, ripresi dal link indicato, mantenendo inalterati i commenti in inglese.
# compare table definitions in two files mysqldiff db1.mysql db2.mysql # compare table definitions in a file 'db1.mysql' with a database 'db2' mysqldiff db1.mysql db2 # interactively upgrade schema of database 'db1' to be like the # schema described in the file 'db2.mysql' mysqldiff -A db1 db2.mysql # compare table definitions in two databases on a remote machine mysqldiff --host=remote.host.com --user=myaccount db1 db2 # compare table definitions in a local database 'foo' with a # database 'bar' on a remote machine, when a file foo already # exists in the current directory mysqldiff --host2=remote.host.com --password=secret db:foo bar
Metodo 2: Metodo manuale
Questo e' invece un metodo manuale il cui risultato e' esclusivamente la differenza. Consiglio chiaramente di usare il metodo 2 ed il plugin mysqldiff, ma questo che vi illustro puo' essere preso come un buon allenamento sui comandi MySql e unix ;)
Eseguiamo l'export dei due database in due file di testo.
mysqldump -u username -p --skip-opt dbname1 xar_block_instances > db01.sql mysqldump -u username -p --skip-opt dbname2 xar_block_instances > db02.sql
Quindi lanciamo questo comando
diff -y --suppress-common-lines db01.sql db01.sql > diff.txt
Nota: l'export l'abbiamo lanciato disabilitando l'opzione otp, in maniera che il risultato sia riga per riga e quindi poi utilizzabile dal comando unix.







Linkedin
Flickr
Anobii
Youtube
Lastfm