Cómo automatizar las migraciones de bases de datos MySQL con Skeema

Skeema es una herramienta CLI de código abierto que le permite sincronizar esquemas de bases de datos MySQL en múltiples hosts. Funciona con archivos SQL simples que contienen CREATE TABLE declaraciones.

Las migraciones de bases de datos son uno de los desafíos más comunes en el proceso de desarrollo de software. ¿Cómo versiona su esquema y aplica los cambios a todos sus entornos?

Skeema ayuda a aliviar este problema al permitirle administrar su esquema como SQL normal. No hay una sintaxis especial o un formato de archivo de configuración que aprender. Cuando envía su esquema a un host, Skeema extraerá las definiciones de la tabla en ese host y las diferenciará de sus archivos locales. Entonces calculará el CREATE, ALTER, Y DROP instrucciones para hacer que el host remoto coincida con sus archivos SQL.

Necesitará usar tablas InnoDB para aprovechar al máximo Skeema. Puede funcionar con tablas MyISAM, pero no todas las funciones son compatibles y puede encontrar problemas.

Índice de contenidos
  1. Para comenzar
  2. Esquemas de sincronización
  3. Uso de múltiples entornos
  4. Se seca y deja pelusa
  5. Mas opciones
  6. Conclusión

Para comenzar

Skeema está disponible para Linux y Mac. Se ofrecen paquetes DEB y RPM, así como binarios independientes precompilados. Tome la descarga adecuada para su sistema e instale el paquete o extraiga el binario en un directorio que se encuentre en su ruta.

El primer paso para usar Skeema es obtener el esquema de base de datos existente. Si ya tiene una colección de archivos SQL con CREATE TABLE declaraciones, puede usarlas tal como están. De lo contrario, ejecute el skeema init comando para obtener el SQL que representa una base de datos en vivo.

La CLI de Skeema acepta los mismos argumentos que de costumbre mysql mando. Utilizar el -h, -u Y -p marca para especificar su host MySQL, nombre de usuario y contraseña. El usuario de MySQL debe tener acceso administrativo a sus esquemas; de lo contrario, es posible que Skeema no pueda revisarlos o aplicar todos los cambios. Skeema depositará sus archivos SQL en un nuevo directorio dentro de su directorio de trabajo; Añade el -d bandera para elegir cómo se llama.

skeema init -h example.com -u root -p -d my-sql

Skeema exporta de forma predeterminada el SQL para todos los esquemas en el host. Cada esquema obtendrá su propio subdirectorio dentro my-sql carpeta. Utilizar el --schema bandera para indicar un esquema específico para exportar. Se colocará directamente en my-sql, sin subdirectorios anidados.

Esquemas de sincronización

Una vez que tenga su SQL, estará listo para sincronizarlo con otro host. Utilizar el skeema push comando para diferenciar su SQL local de otro servidor MySQL. Skeema aplicará automáticamente todos los cambios detectados.

cd my-sql
skeema push -h example.com -u root -p -d my-sql

Intente cambiar uno de los CREATE TABLE declaraciones en su SQL. Agregue una nueva columna o cambie el tipo de una existente. Cuando usted skeema push, Skeema generará un ALTER TABLE instrucción que actualiza la tabla remota para que coincida.

Las operaciones potencialmente destructivas, como eliminar una tabla o cambiar el tipo de datos de una columna, están deshabilitadas de forma predeterminada. Esto le ayuda a evitar la pérdida de datos involuntaria si ejecuta Skeema accidentalmente o si especifica un servidor incorrecto. Las operaciones destructivas se activan agregando el --allow-unsafe marcar un skeema push comandos.

Uso de múltiples entornos

Un uso común de Skeema es mantener sincronizados varios entornos. Si tiene servidores locales, de desarrollo y de producción, Skeema le permite nombrarlos para que pueda transferirlos sin problemas.

Edite el .skeema en el directorio del esquema para habilitar esta función. Este es un árbol de configuración similar a INI donde cada sección define un nuevo entorno con nombre. Tendrás una sola production medio ambiente, agregado por skeema init, para empezar.

Especifique los detalles de la conexión de cada servidor para que pueda presionar y tirar para mantener todo sincronizado. Las claves en la parte superior del archivo, fuera de cada sección, son configuraciones globales aplicadas a todos los entornos.

default-character-set=utf8mb4
default-collation=utf8mb4_general_ci
generator=skeema:1.5.2-community
schema=example-db

[production]
flavor=mysql:8.0
host=example.com
port=3306
password=example
user=mysql

[local]
flavor=mysql:8.0
host=localhost
port=3306
password=example
user=mysql

Ahora puede sincronizar fácilmente los cambios entre entornos:

skeema pull local
skeema push production

Esta secuencia de comandos primero actualiza sus archivos SQL en el disco para que coincidan con los suyos local el esquema del servidor.Los cambios se aplican a la versión en vivo. production medio ambiente. Alternativamente, puede cambiar manualmente el SQL en el disco y luego presionar ambos local Y production.

Este enfoque hace que las migraciones de bases de datos sean simples, repetibles y menos propensas a errores. Puede incorporar Skeema en una canalización de CI para implementar cambios en la base de datos en producción como parte del flujo de implementación normal.

Se seca y deja pelusa

A veces, es posible que desee comprobar los cambios necesarios en un entorno sin aplicarlos realmente. En este caso, utilice skeema diff para comparar un entorno con nombre con archivos SQL en disco. Skeema te mostrará las diferencias para que puedas anticipar los efectos de un skeema push.

Skeema también tiene una herramienta de recolección de escombros incorporada. Correr skeema lint para analizar sus archivos SQL y encontrar posibles problemas. Se admiten varias reglas configurables. Estos ayudan a garantizar que su SQL sea consistente, compatible y compatible con las mejores prácticas modernas de MySQL. Los resultados de la pelusa también se muestran durante skeema push Y skeema pull comandos.

Mas opciones

Los comandos de Skeema tienen varios indicadores compartidos que le permiten personalizar las operaciones. Éstos son algunos de los más importantes:

  • ignore-table - Especifique una lista de nombres de tablas para excluir de la sincronización. Estas tablas no se enviarán ni se extraerán de un host remoto. La bandera admite la sintaxis de expresiones regulares.
  • ignore-trigger - ignore-table pero aplicado a los disparadores.
  • temp-schema - El nombre del esquema temporal que se creará en el host de la base de datos. Esta base de datos es utilizada por Skeema como base para cambios intermedios durante las operaciones push / pull. Se elimina automáticamente cuando se completa la operación.
  • workspace - Verifique dónde se crea el esquema temporal. El valor predeterminado es usar el host remoto pero docker se admite como valor alternativo. Esto creará un nuevo contenedor de MySQL Docker en su máquina local para cada operación de Skeema. Solo funcionará si tiene Docker instalado.
  • connect-options - Una lista separada por comas de opciones de MySQL para establecer en la conexión de base de datos remota, como sql_mode="ALLOW_INVALID_DATES",innodb_lock_wait_timeout=1.

Estas opciones le dan más control sobre las operaciones de Skeema. Le permiten configurar la conexión de la base de datos para que coincida exactamente con la configuración MySQL de su aplicación.

Conclusión

Skeema elimina la molestia de las migraciones de bases de datos al proporcionar automatización y compatibilidad con las canalizaciones de implementación de CI / CD. Incorpora un linter SQL integrado, una herramienta de diferencias y un mecanismo de sincronización.

Una versión premium agrega características adicionales, incluida la capacidad de trabajar con vistas y disparadores. Skeema Premium es una oferta comercial construida sobre la base del núcleo de código abierto de la comunidad Skeema. Se vende por $ 99 por mes y también es compatible con los sistemas Windows.

La adopción de Skeema facilita compartir los cambios en el esquema de la base de datos con su equipo, manteniendo todos sus entornos sincronizados. Es una opción más segura que compartir manualmente ALTER TABLE declaraciones que pueden estar fuera de lugar y no crean una representación canónica de su esquema actual.

Descubre más contenido

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir Change privacy settings