estructura - mysql data compare



Comparar dos bases de datos MySQL (14)

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:[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

La retroalimentación es bienvenida :)

https://src-bin.com

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:



Answer #2

Desde la lista de comparación de características ... MySQL Workbench ofrece Schema Diff y Schema Synchronization en su edición comunitaria.


Answer #3

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/



Answer #5

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!

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


Answer #6

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.


Answer #7

Hay una herramienta de sincronización de esquema en SQLyog (comercial) que genera SQL para sincronizar dos bases de datos.


Answer #8

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

Answer #9

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.


Answer #10

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?


Answer #11

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.


Answer #12

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


Answer #13

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.





diff