2010-01-14 13 views
8

Estoy trabajando en una aplicación con algunas otras personas y nos gustaría almacenar nuestra base de datos MySQL en control de código fuente. Mi opinión es que dos tienen dos archivos: uno sería el script de creación para las tablas, etc., y el otro serían los insertos para nuestros datos de muestra. ¿Es este un buen enfoque? Además, ¿cuál es la mejor manera de exportar esta información?¿Cuál es la mejor manera de almacenar una base de datos MySQL en el control de código fuente?

También, alguna sugerencia para el flujo de trabajo en términos de formas de acelerar el proceso de hacer cambios, exportación, actualización, etc.

Respuesta

3

Esto suena como un buen enfoque. Puede modificar varias revisiones, tanto en términos de estructura de tablas como de datos. ¡Bonito!

La mejor manera de crear los vertederos es probablemente **mysqldump**, ya que se puede automatizar fácilmente - una vez con --no-data para obtener las declaraciones de crear, una vez con --no-create-info --no-create-db para obtener los datos.

+1

Un enfoque alternativo sería usar la opción '--tab' en' mysqldump'. Esto crea un archivo ' .sql' para el esquema y un archivo' .txt' delimitado por tabulaciones para los datos. El esquema se restaura a través de 'mysql' como de costumbre, los datos se restauran a través de' mysqlimport'. http://dev.mysql.com/doc/refman/5.1/en/mysqldump-delimited-text.html – rinogo

2

Trabajo en un entorno que usa la fuente segura de Microsoft y el servidor Oracle/Sql.

Encontramos que la celebración de cada paquete/procedimiento, crear la tabla etc script en un archivo de texto independiente era la mejor manera de hacer esto. Significa que cuando se mantienen paquetes, los desarrolladores pueden simplemente extraer el 1 paquete, etc. que requieren. Una vez que se han hecho y probado los cambios, que pueden ser facturado.

+2

brrr, fuente "segura". Casi voté -1 por mencionarlo en el contexto del control de fuente :-) Aparte de eso, este enfoque es válido, aunque no es mi recomendación. Ciertamente eche un vistazo a los enlaces mencionados en la respuesta de gWiz. – jeroenh

+0

sí. No defendería la fuente segura. Casi hace el trabajo. Puede ser que debería hacer una pregunta sobre la migración (y toda la historia) jaja. No es un proyecto por el que me gustaría ayudar. – Nanook

3

Este es el proceso que utilizo para el control de versiones base de datos MySQL s bajo Subversion.

Configuración SVN

En SVN crear una carpeta Databases con una sub-carpeta para cada base de datos que desea añadir a SVN.

Agregar tabla db_version a bases de datos

tendremos que añadir una tabla a cada base de datos para asegurarse de que la versión de la base de datos que actualmente estamos trabajando con. Esta tabla también servirá como un registro para rastrear qué cambios de esquema se han realizado en la base de datos.

create table db_version (
     `id` int auto_increment, 
     `majorReleaseNumber` int, 
     `minorReleaseNumber` int, 
     `pointReleaseNumber` int, 
     `scriptName` varchar(50), 
     `dateApplied` datetime, 
     PRIMARY KEY(`id`) 
); 

majorReleaseNumber - Las liberaciones mayores son cambios significativos en la base de datos.

minorReleaseNumber - Las versiones menores son mejoras en la base de datos que no requieren una versión principal.

pointReleaseNumber - Una versión de punto suele ser una solución de error simple.

scriptName - El nombre del script sql que hizo que el esquema cambie.

dateApplied - Cuando el script se ejecutó en esta base de datos.

crear secuencias de comandos de línea de base

que utilizan mysqldump para generar una secuencia de comandos para crear las bases de datos existentes. Asegúrese de incluir la opción --no-data. SVN se utiliza para realizar un seguimiento de las secuencias de comandos que realizan cambios de esquema en la base de datos y no está destinado a ser utilizado como herramienta de copia de seguridad para los datos de una instancia particular de la aplicación.

$ mysqldump -h localhost -u root -p db_1 --no-data > db_1.1.0.0.sql 

El nombre de la secuencia de comandos SQL debe contener el nombre de la base de datos y la versión de la base de datos de la secuencia de comandos se aplica.

db_1.1.0.0.sql

Al final de la secuencia de comandos que asegúrese de añadir una instrucción de inserción para la tabla db_version.

Cambio de esquema de base de

Cuando se tiene una mayor, menor o cambio punto de desenganche a la base de datos, la secuencia de comandos de cambio debe ser probado y luego se suben a la carpeta de base de datos en el SVN. Es una buena idea realizar una copia de seguridad de la base de datos antes de aplicar un script de cambio. Al final del script de cambio debe ser una instrucción de inserción para la tabla db_version.

+0

En términos de reducir la fricción, consideraría desarrollar un script de shell que pueda automatizar el proceso de determinación y ejecución de los scripts necesarios para actualizar una instancia de base de datos particular. –

+0

@gWiz Gracias por la sugerencia. Planeo crear algún tipo de utilidad db_sync. – Mark

Cuestiones relacionadas