2011-07-13 41 views
11

Me gustaría generar archivos SQL similares a los diff para comparar los DATOS y la ESTRUCTURA de una base de datos MySQL. Estos archivos se ejecutarán como consultas SQL, en línea de comandos.Comparar dos bases de datos MySQL, en línea de comandos, con una herramienta gratuita

Hay varios hilos antiguos relacionados con SO, y en varios foros, pero se ocupan de herramientas con interfaz de usuario, por lo que el usuario debería pagar ... Además, no quiero sincronizar la base de datos directamente, sino solo ejecutando el guión SQL diff resultante.

+0

Gracias por su ayuda a Galz y ADW. Incluso si no estoy utilizando la solución que ha propuesto, lo consideré de todos modos, así que fue útil. Estoy cavando en liquibase atm. Ver: http://stackoverflow.com/questions/225772/compare-two-mysql-databases, que es un problema relacionado (pero más amplio. Mi problema era especialmente sobre MySQL, la línea de comandos y la herramienta gratuita). Consulte http://forum.liquibase.org/#Topic/49382000000251069 para ver un ejemplo y ver si es una solución factible. – Cedric

Respuesta

12

Lo siguiente mostrará las diferencias (la primera parte de su pregunta) pero la salida no será realmente utilizable como archivos de parche.

para comparar dos tablas:

mysql -u whatever -e "describe table" database1 > file1.txt 
mysql -u whatever -e "describe table" database2 > file2.txt 
diff file1.txt file2.txt 

para comparar los datos:

mysql -u whatever -e "select * from table" database1 > file1.txt 
mysql -u whatever -e "select * from table" database2 > file2.txt 
diff file1.txt file2.txt 

Para comparar bases de datos:

mysqldump --extended-insert=FALSE -u whatever database1 > file1.txt 
mysqldump --extended-insert=FALSE -u whatever database2 > file2.txt 
diff file1.txt file2.txt 
1

Herramientas para la comparación de esquemas son más comunes. Hay algunos paquetes perl para esto que se pueden ejecutar fácilmente desde la línea de comandos. También encontré uno para diff de datos (¡que es un problema bastante complejo!), Pero es algo viejo y no estoy seguro de lo bueno que es.

comparación de esquemas: http://adamspiers.org/computing/mysqldiff/

Comparación de datos: http://rossbeyer.net/software/mysql_coldiff/

Buena suerte.

4

Consulte la herramienta de código abierto Percona Toolkit --- específicamente, la utilidad pt-table-sync. Utiliza sumas de comprobación en los índices y otras estrategias para diferenciar las tablas rápida. Su objetivo principal es sincronizar réplicas, pero con un poco de trabajo extra, es una herramienta de gran diferencia. Ver my full answer about it here.

EDIT: Olvidé mencionar que la comparación de la estructura es una bestia diferente. Lo hago con un procedimiento almacenado al que puede llamar desde la línea de comandos, pero puede no ser lo que está buscando.

He aquí un fragmento de una envoltura del shell-script que escribí para mostrar las diferenciaciones de esquema:

mysql ${MYSQL_CNF_OPTION} -u ${DB_USER} \ 
-e "USE sys; CALL compareDBs('${DBDIFF_LOCAL_DB1}','${DBDIFF_LOCAL_DB2}');" 

Se llama al procedimiento almacenado compareDBs, que obtuve de the Artful Software query archive page.

+0

gracias por su entrada Royce – Cedric

+0

Gracias por compartir Royce! No sabía [página de archivo de consultas de Artful Software] (http://www.artfulsoftware.com/infotree/queries.php)! – antoniom

Cuestiones relacionadas