2009-11-23 18 views
30

Preguntándose si es posible tener un control de versión de una base de datos MySQL.MySQL Version Control - Subversion

realizo esta pregunta se ha hecho antes sin embargo, la más reciente fue hace casi un año, y al paso que cambian las cosas ...

que el problema viene de que cada desarrollador tiene Apache/MySQL/PHP en su propio computadoras a las que a veces editan la base de datos. Es bastante incómodo si tienen que enviar un correo electrónico a todos los demás desarrolladores y luego editar manualmente la base de datos de los servidores de prueba.

¿Cómo lidiar con este problema?

Gracias

+0

También tiene DBV: http://stackoverflow.com/a/13837473/6309 – VonC

Respuesta

15

Esto no es una solución relacionada con MySQL en sí mismo, pero hemos tenido mucho éxito con un producto llamado Liquibase. (http://www.liquibase.org/)

Es una solución de migración que cubre muchos proveedores de bases de datos diferentes, permitiendo que todos los cambios de la base de datos se codifiquen en archivos de configuración, que se guardan en Subversion. Como toda la configuración se guarda en archivos XML, es fácil fusionar los cambios de otras personas en la secuencia de comandos principal y funciona bien con etiquetas y ramas.

La base de datos se puede actualizar hasta el nivel de revisión actual ejecutando el comando "actualizar base de datos". La mayoría de los cambios también tienen la capacidad de deshacer un cambio en la base de datos, lo que también puede ser útil. Le recomendaría seguir la práctica de asegurarse de estar actualizado antes de ejecutar la migración, ya que esto sería más fácil.

Finalmente, cuando se trata de una entrega de producción, puede elegir que todos los cambios de la base de datos salgan como un script SQL completo para que los DBA puedan ejecutarlo y mantener una separación de tareas.

Hasta ahora, ha funcionado como un encanto.

+0

Parece una excelente solución. ¡Muchas gracias! – user103219

+0

También puede usar maatkit, que está integrado en muchas distribuciones de Linux. Es un pequeño cuchillo, maatkit, y no establece dependencias entre sí mismo y otros programas. –

+0

enfoque realmente genial. – funktioneer

1

Bueno, usamos Rails que mantiene todos los cambios en los archivos de migración. Sé que un par de frameworks PHP hacen lo mismo: Symphony por ejemplo. Entonces, cuando todos los cambios se fusionan en nuestro repositorio (utilizamos mercurial), podemos ver todos los cambios en las migraciones que necesitan o se aplicaron en la base de datos en desarrollo. Luego, la persona responsable de la producción lanza el código a la producción después de realizar una copia de seguridad completa. Sin embargo, si no usas un framework PHP que se encargue de esto, la sugerencia de awied suena muy interesante: no he oído hablar de liquidbase anteriormente, pero definitivamente lo verificaré.

1

Hay una herramienta llamada iBatis, ahora llamada MyBatis que maneja perfectamente las versiones de las bases de datos.

Toma un poco de trabajo tener todos los cambios en el guión en lugar de hacerlo con una herramienta gráfica, pero, si está familiarizado con la codificación, no es un problema.

Cuando tiene varias bases de datos (como dev-test-prod), solo crea 3 archivos de entorno y puede actualizar un entorno con solo una instrucción de línea de comandos.