Skip to content
This repository has been archived by the owner on Mar 14, 2021. It is now read-only.

Proceso de migración de base de datos

ilopezluna edited this page May 12, 2012 · 2 revisions

Sistema de migración de base de datos

El procedimiento de migración de BD aparece cuando se necesitan hacer cambios del modelo de datos, que deben ser replicados a la BD.

En entornos de desarrollo estos cambios puede gestionarlos hibernate, estableciendo en la configuración que actualize las modificaciones en el las entidades del proyecto:

<property name="hibernate.hbm2ddl.auto" value="update"/>

Los datos que contiene un entorno de desarrollo no son críticos, pueden modificarse e incluso perderse, por lo que establecer esta configuración permite al desarrollador modificar las entidades mapeadas en BD sin preocuparse por los cambios necesarios en la BD, ya que lo gestionará Hibernate.

En cambio, en el entorno de producción los datos que contiene la BD, son datos "reales" (datos de clientes, datos de proveedores, etc) con lo que no puede aplicarse la actualización mediante hibernate ya que podrían modificarse o perderse datos reales.

Por tanto aparece la necesidad de disponer de un sistema que permita replicar los cambios del modelo de datos en la BD.

La solución que se propone consiste en la creación de unos archivos Delta que son unos "patch" que contienen los cambios para aplicar en la BD en cada nueva release. Así mismo, también debe crearse el proceso "rollback" para poder volver a la versión anterior.

El objetivo, por tanto, consiste en reducir el proceso de migración a una nueva versión o a una versión anterior, mediante la ejecución de los archivos Delta correspondientes.

Flyway

Para el proceso de migraciones se utiliza Flyway: http://code.google.com/p/flyway/ y se ha integrado en Petstore usando el plugin de maven: http://code.google.com/p/flyway/wiki/MavenPlugin

La configuración únicamente consiste en añadir en el pom.xml: <plugin> <groupId>com.googlecode.flyway</groupId> <artifactId>flyway-maven-plugin</artifactId> <version>1.6.1</version> <configuration> <user>petstore_admin</user> <password>petstore_4dm1n</password> <driver>com.mysql.jdbc.Driver</driver> <url>jdbc:mysql://localhost/petstore_dev</url> </configuration> </plugin>

Como puede verse, en la configuración se especifica la url de la base de datos así como el usuario y el password. También es necesario indicar el driver a usar para poder "hablar" con la BD.

Por defecto, Flyway buscará los deltas en el siguiente directorio: src/main/resources/db/migration Para controlar las versiones aplicadas y por aplicar, Flyway usa el prefijo de los archivos deltas como se detalla en:http://code.google.com/p/flyway/wiki/SqlMigration

Por ahora se utiliza el prefijo por defecto: V1, V2...Vn (convention over configuration :D), pero puede modificarse.

Comenzar con el proceso de migraciones

Para comenzar el proceso de migraciones es necesario:

  • Descargar el proyecto Petstore
  • Arrancar el servidor MySQL
  • Ejecutar el script de creación de base de datos: mysql -u root -p < src/main/sql/create_databases.sql
  • mvn flyway:migrate

En el caso que ya hubieramos ejecutado previamente el script de creación de base de datos bastaría con:

  • mvn flyway:clean (vacia la base de datos)
  • mvn flyway:migrate

El goal migrate del plugin crea una tabla llamada schema_version para mantener el control de deltas ejecutados. Una vez creada la tabla, ejecuta los deltas que existan, y actualiza la tabla schema_version

Validar

Para validar que el proceso de migración se ha realizado correctamente, podemos setear la propiedad: <property name="hbm2ddl.auto"> de hibernate a validate. A continuación arrancamos el proyecto y en el caso de que hibernate encuentre alguna inconsistencia entre las entidades y la base de datos dará error. Si arranca, es que el proceso de migraciones ha ido bien :)