miércoles, 15 de agosto de 2018

Flyway: Como migrar la base de datos

Hoy vamos a hablar de Flyway, un software que nos facilitará la migración de bases de datos. Sobre todo es util para la migración de los esquemas a lo largo de los distintos entornos de prueba, preproducción y producción. Ya que es facil que en el pase de un desarrollo de un entorno a otro podamos fallar y/o olvidar ejecutar algún script necesario.
  • Funcionamiento
Su funcionamiento se basa en la creación de un tabla de gestión que almacenará la información de los distintos script de migración que contenga la aplicación. En función de estos scripts, su orden de ejecución y la tabla de gestión, tendremos la hoja de ruta para poder pasar una base de datos de un entorno a otro. 
  • Ejecución
Flyway, al comenzar buscará la tabla de ejecución, denominada 'flyway_schema_history, y en caso de no encontrala la creará. Posteriormente, buscará los scripts en formato .sql o .java en una ruta configurable y comprobará si se han ejecutado ya o no, en caso negativo los ejecutará y almacenará la información asociada a dichos scripts en la tabla de gestión.

Dentro de esta información asociada se encuentra el nombre del fichero, la versión o el checksum del mismo. Al contener el checksum, en caso de que modifiquemos el fichero, flyway se daría cuenta de que la versión actual es diferente a la ejecutada y lanzaría una excepción. Por tanto si queremos modificar un script ya ejecutado, es obligatorio crear un nuevo script ya que no es modificable el anterior.

A tener en cuenta respecto a lo indicado anteriormente, que ejecutará el script siempre y cuando no se haya ejecutado anteriormente tal como hemos dicho y la versión del mismo sea posterior a la última versión registrada en la tabla de gestión.  
  • Configuración
Vamos a ver un ejemplo con gradle donde podemos ver como funciona. Lo configuramos indicando que vamos a usar el plugin de flyway y creando las variables de configuración necesarias.

plugins {
    id "org.flywaydb.flyway" version "5.1.4"
}
flyway {
    url = 'jdbc:mysql://localhost:3306/'
    user = 'root'
    password = 'root'
    schemas = ['flywayExample']
}

Lo siguiente será crear los ficheros tipo 'v${number}__${script_name}.sql' dentro de la carpeta 'src/main/resources/db/migration', que son el formato y ubicación por defecto.

Por último ejecutarlo a través del comando './gradlew flywayMigrate'. Y ya podremos acceder a la base de datos y ver como se han ejecutado los scripts. Aquí teneis un ejemplo que podeis usar para comprobar su funcionamente, como base de datos usa un docker de MySQL.

No hay comentarios:

Publicar un comentario