mysqldbcompare - mysql workbench compare two databases
Comparar dos bases de datos MySQL (21)
Ciertamente hay muchas formas, pero en mi caso prefiero el comando dump y diff. Así que aquí hay un guión basado en el comentario de 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
La retroalimentación es bienvenida :)
Actualmente estoy desarrollando una aplicación utilizando una base de datos MySQL.
La estructura de la base de datos aún está en movimiento y cambia mientras el desarrollo avanza (cambio mi copia local, dejando solo la del servidor de prueba).
¿Hay alguna manera de comparar las dos instancias de la base de datos para ver si hubo algún cambio?
Si bien en este momento simplemente descartar la base de datos del servidor de prueba anterior está bien, ya que la prueba comienza a ingresar datos de prueba, podría ser un poco complicado.
Lo mismo, aunque más ocurrirá más tarde en la producción ...
¿Hay una manera fácil de hacer cambios incrementales en la base de datos de producción, preferiblemente creando automáticamente un script para modificarlo?
Herramientas mencionadas en las respuestas:
- Comparación de esquemas y datos MySQL de Red-Gate (comercial)
- Maatkit (ahora Percona)
- http://www.liquibase.org/
- Toad
- Comparación de base de datos de Nob Hill (comercial)
- Diferencia de MySQL
- SQL EDT (Comercial)
Comparación de SQL por RedGate http://www.red-gate.com/products/SQL_Compare/index.htm
DBDeploy para ayudar con la gestión de cambios de base de datos de forma automatizada http://dbdeploy.com/
Creo que Navicat para MySQL será útil para este caso. Es compatible con la sincronización de datos y estructura para MySQL.
Desde la lista de comparación de características ... MySQL Workbench ofrece Schema Diff y Schema Synchronization en su edición comunitaria.
Después de horas de búsqueda en la web de una herramienta simple, me di cuenta de que no busqué en el Centro de software de Ubuntu. Aquí hay una solución gratuita que encontré: http://torasql.com/ Afirman que también tienen una versión para Windows, pero solo la estoy usando bajo Ubuntu.
Edit: 2015-Feb-05 Si necesita la herramienta de Windows, TOAD es perfecto y gratuito: http://software.dell.com/products/toad-for-mysql/
Echa un vistazo a dbForge Data Compare para MySQL . Es un shareware con período de prueba gratuito de 30 días. Es una herramienta rápida de MySQL GUI para la comparación y sincronización de datos, la gestión de las diferencias de datos y la sincronización personalizable.
Echa un vistazo a http://www.liquibase.org/
Estoy trabajando con el equipo de marketing de Nob Hill. Quería decirle que me encantaría escuchar sus preguntas, sugerencias o cualquier otra cosa. No dude en ponerse en contacto conmigo.
Originalmente decidimos crear nuestra herramienta desde cero porque, si bien hay otros productos similares en el mercado, ninguno de ellos hace el trabajo correctamente. Es bastante fácil mostrarte las diferencias entre las bases de datos. Otra muy distinta es hacer una base de datos como la otra. La migración sin problemas, tanto de esquema como de datos, siempre ha sido un desafío. Bueno, lo hemos logrado aquí.
Estamos tan seguros de que podría proporcionarle una migración sin problemas, que si no lo hace (si los scripts de migración que genera no son lo suficientemente legibles o no funcionarán para usted, y no podemos solucionarlo en cinco días hábiles) Usted recibirá su propia copia gratuita!
Hay otra herramienta mysql-diff de línea de comandos de código abierto:
Hay una herramienta útil escrita usando perl llamada Maatkit . Tiene varias herramientas de comparación y sincronización de bases de datos, entre otras cosas.
Hay una herramienta de sincronización de esquema en SQLyog (comercial) que genera SQL para sincronizar dos bases de datos.
La biblioteca de componentes de apache zeta es una biblioteca de propósito general de componentes acoplados libremente para el desarrollo de aplicaciones basadas en PHP 5.
Componentes eZ - DatabaseSchema le permite:
.Create/Save a database schema definition; .Compare database schemas; .Generate synchronization queries;
Puede consultar el tutorial aquí: http://incubator.apache.org/zetacomponents/documentation/trunk/DatabaseSchema/tutorial.html
Muy fácil de usar herramienta de comparación y sincronización:
Comparador de base de datos http://www.clevercomponents.com/products/dbcomparer/index.asp
Ventajas:
- rápido
- fácil de usar
- Fácil de seleccionar cambios para aplicar
Desventajas:
- no sincroniza la longitud a las pequeñas pulgadas
- no sincroniza correctamente los nombres de índice
- no sincroniza los comentarios
Para la primera parte de la pregunta, simplemente hago un volcado de ambos y los diferencio. No estoy seguro acerca de mysql, pero postgres pg_dump tiene un comando para simplemente volcar el esquema sin el contenido de la tabla, por lo que puede ver si ha cambiado el esquema.
Para mí, comenzaría con el volcado de ambas bases de datos y la diferenciación de los volcados, pero si quiere generar automáticamente scripts de combinación, querrá obtener una herramienta real.
Una simple búsqueda en Google mostró las siguientes herramientas:
- MySQL Workbench , disponible en Community (OSS) y en variantes comerciales.
- Comparación de bases de datos de Nob Hill , disponible de forma gratuita para MySQL.
- Una lista de otras herramientas de comparación de SQL.
Si solo necesita comparar esquemas (no datos) y tener acceso a Perl, mysqldiff podría funcionar. Lo he usado porque le permite comparar bases de datos locales con bases de datos remotas (a través de SSH), por lo que no necesita molestarse en descargar datos.
http://adamspiers.org/computing/mysqldiff/
Intentará generar consultas SQL para sincronizar dos bases de datos, pero no confío en eso (o en ninguna herramienta, en realidad). Que yo sepa, no hay una forma 100% confiable de aplicar ingeniería inversa a los cambios necesarios para convertir un esquema de base de datos a otro, especialmente cuando se han realizado múltiples cambios.
Por ejemplo, si solo cambia el tipo de una columna, una herramienta automatizada puede adivinar fácilmente cómo recrear eso. Pero si también mueve la columna, la cambia de nombre y agrega o elimina otras columnas, lo mejor que puede hacer cualquier paquete de software es adivinar lo que probablemente sucedió. Y puedes terminar perdiendo datos.
Le sugiero que realice un seguimiento de cualquier cambio de esquema que realice en el servidor de desarrollo y que luego ejecute esas declaraciones manualmente en el servidor activo (o que las incorpore a un script de actualización o migración). Es más tedioso, pero mantendrá sus datos seguros. Y cuando empiece a permitir que los usuarios finales accedan a su sitio, ¿realmente va a realizar cambios constantes en la base de datos?
Uso un programa llamado Navicat para:
- Sincronizar bases de datos en vivo a mis bases de datos de prueba
- Mostrar diferencias entre las dos bases de datos.
Cuesta dinero, solo para Windows y Mac, y tiene una interfaz de usuario extravagante, pero me gusta.
consulte: http://schemasync.org/ la herramienta schemasync funciona para mí, es una herramienta de línea de comandos que funciona fácilmente en la línea de comandos de Linux
dbSolo, se paga, pero esta característica puede ser la que está buscando http://www.dbsolo.com/help/compare.html
Funciona con Oracle, Microsoft SQL Server, Sybase, DB2, Solid, PostgreSQL, H2 y MySQL
Toad tiene características de comparación de datos y esquemas, y creo que incluso creará un script de sincronización. Lo mejor de todo, es freeware.
Si está trabajando con bases de datos pequeñas, he encontrado que se ejecuta mysqldump en ambas bases de datos con las --skip-comments
y --skip-extended-insert
para generar scripts SQL, luego ejecutar diff en los scripts SQL funciona bastante bien.
Al omitir los comentarios, se evitan las diferencias sin sentido, como el momento en que ejecutó el comando mysqldump. Al utilizar el comando --skip-extended-insert
se asegura de que cada fila se inserte con su propia declaración de inserción. Esto elimina la situación en la que un solo registro nuevo o modificado puede causar una reacción en cadena en todas las futuras declaraciones de inserción. La ejecución con estas opciones produce volcados más grandes sin comentarios, por lo que probablemente no sea algo que desee hacer en uso de producción, pero para el desarrollo debería estar bien. He puesto ejemplos de los comandos que uso a continuación:
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