una tabla que nombre esquema ejemplos ejemplo datos crear como columna cambiar sql mysql schema versioning

sql - tabla - ¿Cómo versiona su esquema de base de datos?



esquema de base de datos sql server (17)

¿Cómo preparas tus deltas SQL? ¿Guardas manualmente cada SQL que cambia el esquema en una carpeta delta, o tienes algún tipo de proceso de difusión automatizado?

Estoy interesado en las convenciones para el control de versiones del esquema de la base de datos junto con el código fuente. ¿Tal vez un gancho precompromiso que difiera el esquema?

Además, ¿qué opciones existen para los deltas diferentes aparte de DbDeploy ?

EDITAR: al ver las respuestas, me gustaría aclarar que estoy familiarizado con el esquema estándar para ejecutar una migración de base de datos usando deltas. Mi pregunta es acerca de crear los deltas, preferiblemente de forma automática.

Además, el control de versiones es para PHP y MySQL si hace la diferencia. (No hay soluciones Ruby por favor).


Para MySQL

Cuando aterrizo en un nuevo DB:

En primer lugar, verifico la estructura:

mysqldump --no-data --skip-comments --skip-extended-insert -h __DB_HOSTNAME__ -u __DB_USERNAME__ -p __DB1_NAME__ | sed ''s/ AUTO_INCREMENT=[0-9]*//g'' > FILENAME_1.sql mysqldump --no-data --skip-comments --skip-extended-insert -h __DB_HOSTNAME__ -u __DB_USERNAME__ -p __DB2_NAME__ | sed ''s/ AUTO_INCREMENT=[0-9]*//g'' > FILENAME_2.sql diff FILENAME_1.sql FILENAME_2.sql > DIFF_FILENAME.txt cat DIFF_FILENAME.txt | less

Gracias a los usuarios de pude escribir este guión rápido para encontrar diferencias de estructura.

src: https://.com/a/8718572/4457531 y https://.com/a/26328331/4457531

En un segundo paso, mysqldiff datos, tabla por tabla con mysqldiff . Es un poco arcaico, pero un bucle de php basado en data_schema de datos hace que el trabajo sea seguro

Para el control de versiones, uso de la misma manera, pero formateo un script de actualización SQL (para actualizar o retrotraer) con resultados diff y utilizo el convenio de número de versión (con varias modificaciones, el número de versión parece una dirección IP) .

initial version : 1.0.0 ^ ^ ^ | | | structure change: - | | datas added: -------- | datas updated: --------


Después de una larga investigación, descubrí que hay algunas herramientas de terceros o tipos de proyectos de Visual Studio que no me satisfacen, o solo blogs sobre la teoría pero sin implementación. Así que implementé un sistema que funciona, que se usa casi un año y que se explica aquí:

http://nalgorithm.com/2015/11/09/database-versioning-part-1/

dependiendo del interés, continuará escribiendo más.


Estamos exportando los datos a un formato portátil (usando nuestra cadena de herramientas), y luego importándolos a un nuevo esquema. sin necesidad de delta SQL. Muy recomendable.



Estoy usando versiones estrictas del esquema de la base de datos (rastreado en una tabla separada). Los scripts se almacenan en control de versión, pero todos verifican la versión de esquema actual antes de realizar cualquier cambio.

Aquí está la implementación completa para SQL Server (la misma solución podría desarrollarse para MySQL si fuera necesario): Cómo mantener la versión de SQL Server Database Schema


Hace algunos meses busqué la herramienta para versionar el esquema de MySQL. Encontré muchas herramientas útiles, como la migración Doctrine, la migración RoR, algunas herramientas escritas en Java y Python.

Pero ninguno de ellos estaba satisfecho con mis requisitos.

Mis requisitos:

  1. Sin requisitos, excluye PHP y MySQL
  2. No hay archivos de configuración de esquema, como schema.yml en Doctrine
  3. Capaz de leer el esquema actual de la conexión y crear un nuevo script de migración, que representa un esquema idéntico en otras instalaciones de la aplicación.

Empecé a escribir mi herramienta de migración, y hoy tengo la versión beta.

Por favor, inténtelo, si tiene interés en este tema. Por favor envíeme futuras solicitudes y errores.

Código fuente: bitbucket.org/idler/mmp/src Resumen en inglés: bitbucket.org/idler/mmp/wiki/Home Descripción general en ruso: antonoff.info/development/mysql-migration-with-php-project


Me aseguro de que los cambios de esquema sean siempre aditivos. Así que no quito columnas y tablas, porque eso borrará los datos y no se pueden revertir más tarde. De esta forma, el código que usa la base de datos se puede revertir sin perder datos o funcionalidad.

Tengo un script de migración que contiene instrucciones que crean tablas y columnas, si aún no existen, y las completa con datos.

El script de migración se ejecuta cada vez que se actualiza el código de producción y después de nuevas instalaciones.

Cuando quisiera eliminar algo, lo hago eliminándolo del script de instalación de la base de datos y del script de migración para que estos elementos de esquema obsoletos se eliminen gradualmente en las nuevas instalaciones. Con la desventaja de que las nuevas instalaciones no pueden degradarse a una versión anterior antes de la instalación.

Y, por supuesto, ejecuto DDL a través de estos scripts y nunca directamente en la base de datos para mantener las cosas sincronizadas.


No manejo deltas. Realizo cambios en una base de datos maestra y tengo una herramienta que crea un script de construcción basado en XML basado en la base de datos maestra.

Cuando llega el momento de actualizar una base de datos existente, tengo un programa que usa el script de construcción basado en XML para crear una nueva base de datos y las tablas desnudas. Luego copio los datos de la base de datos anterior usando INSERT INTO x SELECT FROM yy luego aplico todos los índices, restricciones y disparadores.

Las nuevas tablas, columnas nuevas y columnas eliminadas se manejan automáticamente y con algunos pequeños trucos para ajustar la rutina de copiado puedo manejar los cambios de nombre de columna, tipo de columna y otras refactorizaciones básicas.

No recomendaría esta solución en una base de datos con una gran cantidad de datos, pero actualizo regularmente una base de datos que tiene más de 1 GB con 400 tablas.


No mencionó qué RDBMS está utilizando, pero si se trata de MS SQL Server, la comparación SQL de Red-Gate ha sido indispensable para nosotros en la creación de deltas entre los scripts de creación de objetos.


No soy de los que tocan mi propio cuerno, pero he desarrollado una aplicación web interna para seguir los cambios en los esquemas de bases de datos y crear scripts de actualización versionados.

Esta herramienta se llama Brazil y ahora es de código abierto bajo una licencia de MIT. Brasil está basado en ruby ​​/ ruby ​​on rails y admite la implementación de cambios en cualquier base de datos que Ruby DBI admita (MySQL, ODBC, Oracle, Postgres, SQLite).

Se planificó la implementación de los scripts de actualización en el control de versiones.



Si aún está buscando opciones, eche un vistazo al diseñador de neXtep. Es un entorno de desarrollo de base de datos GPL gratuito basado en los conceptos de control de versiones. En el entorno siempre trabajas con entidades versionadas y puedes enfocarte en el desarrollo del modelo de datos. Una vez que se realiza un lanzamiento, el motor de generación de SQL conectado al sistema de control de versiones puede generar cualquier delta que necesite entre 2 versiones, y le ofrecerá algún mecanismo de entrega si lo necesita.

Entre otras cosas, puede sincronizar e invertir la sincronización de su base de datos durante desarrollos, crear diagramas de modelos de datos, consultar su base de datos utilizando clientes SQL integrados, etc.

Echa un vistazo a la wiki para más información: http://www.nextep-softwares.com/wiki

Actualmente es compatible con Oracle, MySql y PostgreSql y está en Java, por lo que el producto se ejecuta en Windows, Linux y Mac.


También desarrollé un conjunto de scripts PHP donde los desarrolladores pueden enviar sus scripts deltasql a un repositorio central.

En una de las tablas de la base de datos (llamada TBSYNCHRONIZE), almaceno el número de versión de la última secuencia de comandos ejecutada, de modo que puedo actualizar fácilmente cualquier base de datos usando la interfaz web o un cliente desarrollado a propósito para Eclipse.

La interfaz web permite administrar varios proyectos. También es compatible con "ramas" de bases de datos.

Puede probar la aplicación en http://www.gpu-grid.net/deltasql (si inicia sesión como administrador con contraseña testdbsync). La aplicación es de código abierto y se puede descargar aquí: http://sourceforge.net/projects/deltasql

deltasql se usa productivamente en Suiza e India, y es popular en Japón.



Utilizo la base de datos Firebird para la mayoría del desarrollo y utilizo la herramienta de administración FlameRobin para ello. Tiene una buena opción para registrar todos los cambios. Puede registrar todo en un archivo grande, o un archivo por cambio de base de datos. Utilizo esta segunda opción, y luego almaceno cada script en el software de control de versiones: antes usaba Subversion, ahora uso Git.

Supongo que puedes encontrar alguna herramienta MySQL que tenga la misma función de registro que FlameRobin para Firebird.

En una de las tablas de la base de datos, guardo el número de versión de la estructura de la base de datos, por lo que puedo actualizar fácilmente cualquier base de datos. También escribí un simple script PHP que ejecuta esos scripts SQL uno por uno en cualquier base de datos de destino (la ruta de la base de datos y el nombre de usuario / contraseña se suministran en la línea de comandos).

También hay una opción para registrar todas las instrucciones DML (insertar, actualizar eliminar) y lo activo mientras modifico algunos datos ''predeterminados'' que contiene cada base de datos.

Escribí un buen libro blanco sobre cómo hago todo esto en detalle. Puede descargar el documento en formato .pdf junto con los scripts PHP de demostración desde here .


Ver

¿Hay un sistema de control de versiones para cambios en la estructura de la base de datos?

¿Cómo puedo versionar mi base de datos MS SQL en SVN?

y el artículo de Jeff

Obtenga su base de datos bajo control de versiones

Siento tu dolor y desearía que hubiera una mejor respuesta. Esto podría estar más cerca de lo que estabas buscando.

Mecanismos para el seguimiento de cambios en el esquema de DB

En general, creo que no hay una solución adecuada y aceptada para esto, y me refiero a esta área.