Actualmente estoy desarrollando una aplicación usando una base de datos MySQL.
La estructura de la base de datos todavía está cambiando y cambia mientras el desarrollo progresa (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 actualmente simplemente descartar la base de datos del servidor de prueba anterior está bien, a medida que las pruebas comienzan a ingresar datos de prueba, podría ser un poco complicado.
Sin embargo, lo mismo 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 esquema y datos MySQL de Red-Gate (comercial)
- Maatkit (ahora Percona)
- liquibase
- Sapo
- Comparación de la base de datos de Nob Hill (comercial)
- Diferencia MySQL
- SQL EDT (Comercial)
Respuestas:
Si está trabajando con bases de datos pequeñas, descubrí que ejecutar mysqldump en ambas bases de datos con las opciones
--skip-comments
y--skip-extended-insert
para generar scripts SQL, entonces ejecutar diff en los scripts SQL funciona bastante bien.Al saltarse los comentarios, evita las diferencias sin sentido, como la hora en que ejecutó el comando mysqldump. Al utilizar el
--skip-extended-insert
comando, se asegura de que cada fila se inserte con su propia instrucció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. Ejecutar con estas opciones produce volcados más grandes sin comentarios, por lo que probablemente esto no sea algo que desee hacer en el uso de producción, pero para el desarrollo debería estar bien. He puesto ejemplos de los comandos que uso a continuación:fuente
mysqldump --opt --compact --skip-extended-insert -u user -p db table > file.sql
-d
,--no-data
puede ser de interés para aquellos que necesitan uso de producción, pero solo se preocupan por el esquemavimdiff
Toad for MySQL 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.
fuente
--run-all-tests --difftype sql --disable-binary-logging
options puede hacer casi el mismo trabajo (excepto que la salida se mezcla con comentarios y no se escapan los caracteres especiales en cadena).Utilizo un software llamado Navicat para:
Cuesta dinero, es solo para Windows y Mac, y tiene una IU loca, pero me gusta.
fuente
Hay una herramienta de sincronización de esquemas en SQLyog (comercial) que genera SQL para sincronizar dos bases de datos.
fuente
De la lista de comparación de características ... MySQL Workbench ofrece Schema Diff y Schema Synchronization en su edición comunitaria.
fuente
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:
Comentarios son bienvenidos :)
fuente
dbSolo, se paga pero esta característica podría 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
fuente
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 ningún dato.
http://adamspiers.org/computing/mysqldiff/
Intentará generar consultas SQL para sincronizar dos bases de datos, pero no confío en ello (ni en ninguna herramienta, en realidad). Hasta donde sé, no hay una forma 100% confiable de realizar ingeniería inversa de los cambios necesarios para convertir un esquema de base de datos en otro, especialmente cuando se han realizado múltiples cambios.
Por ejemplo, si cambia solo el tipo de una columna, una herramienta automatizada puede adivinar fácilmente cómo recrear eso. Pero si también mueve la columna, le cambia el nombre y agrega o elimina otras columnas, lo mejor que puede hacer cualquier paquete de software es adivinar lo que probablemente sucedió. Y puede terminar perdiendo datos.
Sugeriría realizar un seguimiento de cualquier cambio de esquema que realice en el servidor de desarrollo, luego ejecutar esas declaraciones manualmente en el servidor en vivo (o pasarlas a un script de actualización o migración). Es más tedioso, pero mantendrá sus datos seguros. Y para cuando comience a permitir que los usuarios finales accedan a su sitio, ¿realmente va a hacer cambios constantes en la base de datos?
fuente
--hostN
y--userN
fallará en silencio.Echa un vistazo a http://www.liquibase.org/
fuente
compruebe: http://schemasync.org/ la herramienta de sincronización funciona para mí, es una herramienta de línea de comandos que funciona fácilmente en la línea de comandos de Linux
fuente
Hay otra herramienta de código abierto mysql-diff de línea de comandos:
http://bitbucket.org/stepancheg/mysql-diff/
fuente
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.
fuente
SQL Compare by RedGate http://www.red-gate.com/products/SQL_Compare/index.htm
DBDeploy para ayudar con la gestión de cambios en la base de datos de manera automatizada http://dbdeploy.com/
fuente
Para mí, comenzaría volcando ambas bases de datos y diferenciando los volcados, pero si desea generar scripts de fusión automáticamente, querrá obtener una herramienta real.
Una simple búsqueda en Google mostró las siguientes herramientas:
fuente
Eche un vistazo a dbForge Data Compare para MySQL . Es un shareware con un 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, gestión de diferencias de datos y sincronización personalizable.
fuente
Después de horas buscando en la web una herramienta simple, me di cuenta de que no buscaba en el Centro de software de Ubuntu. Aquí hay una solución gratuita que encontré: http://torasql.com/ También afirman tener una versión para Windows, pero solo la estoy usando en Ubuntu.
Editar: 2015-Feb-05 Si necesita la herramienta de Windows, TOAD es perfecto y gratuito: http://software.dell.com/products/toad-for-mysql/
fuente
La biblioteca de componentes apache zeta es una biblioteca de propósito general de componentes débilmente acoplados para el desarrollo de aplicaciones basadas en PHP 5.
eZ Components - DatabaseSchema le permite:
Puede consultar el tutorial aquí: http://incubator.apache.org/zetacomponents/documentation/trunk/DatabaseSchema/tutorial.html
fuente
Herramienta de comparación y sincronización muy fácil de usar:
Database Comparer http://www.clevercomponents.com/products/dbcomparer/index.asp
Ventajas:
Desventajas
fuente
Creo que Navicat para MySQL será útil para este caso. Es compatible con la sincronización de datos y estructuras para MySQL.
fuente
Para la primera parte de la pregunta, solo hago un volcado de ambos y los difundo. No estoy seguro acerca de mysql, pero postgres pg_dump tiene un comando para volcar el esquema sin el contenido de la tabla, para que pueda ver si ha cambiado el esquema.
fuente
Estoy trabajando con el equipo de marketing de Nob Hill, quería decirte que estaré encantado de escuchar tus preguntas, sugerencias o cualquier otra cosa, no dudes en contactarme.
Originalmente decidimos crear nuestra herramienta desde cero porque si bien hay otros productos similares en el mercado, ninguno de ellos funciona bien. Es bastante fácil mostrarle las diferencias entre las bases de datos. Otra muy distinta es crear 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, ¡obtendrás tu propia copia gratis!
http://www.nobhillsoft.com/NHDBCompare.aspx
fuente