¿Solución para el control y la implementación de la versión de la base de datos?

11

Actualmente uso un script de volcado y confirmo la base de datos al repositorio git. --skip-extended-insert --skip-comments --skip-dump-datesignifica que una diferencia me puede dar una idea justa de lo que ha cambiado, pero todo se derrumba si trato de fusionarme.

WP_SITEURL, WP_HOME y todos los demás lugares donde Wordpress almacena las URL completas necesitan actualizarse al importar a otro host (prueba, puesta en escena, producción)

¿Alguien está usando un método mejor?

Temas principales:

  • Wordpress almacena las URL completas en toda la base de datos (no portátil)
  • Muchos otros cambios de registros no relevantes
    • valores de auto_increment (solo los elimino, pero me he encontrado con problemas de identificación)
    • marcas de tiempo (también pueden eliminarse, potencialmente)
    • registros transitorios * ... no tengo idea de qué hacer con ellos

Un proceso que creara migraciones con marca de tiempo, con solo las cosas agregadas o eliminadas, sería ideal ... pero no estoy seguro de si es posible.

Jacob Dorman
fuente
¿Desea versionar todos los cambios de datos o solo los cambios en la estructura ? y esa es tu verdadera TAREA DE NEGOCIOS?
Lazy Badger
Al realizar cambios en CMS como WordPress, a menudo hay cambios de contenido y configuración (datos de base de datos) junto con cambios de lógica (código). Me gustaría poder versionar ambos. Los cambios en la estructura serían un buen comienzo ... TAREA DE NEGOCIOS: el cliente solicita un nuevo widget. Instale el complemento en el servidor provisional, comprométase a repositorio -> Configure el complemento y agregue contenido de muestra -> una vez aprobado, extraiga los cambios de código a producción, luego realice manualmente los mismos cambios de datos en el administrador de producción.
Jacob Dorman
1
@JacobDorman Estoy tratando de resolver este mismo problema. ¿Ya has resuelto algo? Después de investigar un poco, empiezo a pensar que es necesario algún complemento personalizado que cree un script de actualización específico (probablemente para exportar solo los cambios de configuración, como los complementos instalados y las opciones de configuración, y no necesariamente publicaciones, categorías y contenido en general) . Me encantaría saber si tienes alguna otra idea.
Víctor López García

Respuestas:

4

Aquí hay dos posibles soluciones, ambas son en realidad herramientas genéricas de control de versiones de MySQL, pero se pueden adaptar a su flujo de trabajo:

dbv.php

Esta herramienta crea "migraciones", que son básicamente scripts SQL, a partir de los cambios detectados en la base de datos. Estas secuencias de comandos se almacenan en un directorio local y, por lo tanto, se pueden confirmar en su VCS actual (git, por ejemplo).

Se utiliza a través de una interfaz web PHP.

DBVC

Fundamentalmente similar a la herramienta anterior, esta se basa en una interfaz de línea de comando. Se configura a través de un archivo json. La principal diferencia es que no genera automáticamente los archivos de migración.

Hay un problema pendiente para integrar esto con el similar anterior, por lo que es algo que debe buscar.

Complementos de Wordpress

Algunos complementos que podrían ayudar en la creación de un flujo de trabajo repetible:

Víctor López García
fuente
dbvc parece el tipo de herramienta que he estado buscando. ¡Gracias!
Jacob Dorman
1
Me alegra que haya ayudado. Acabo de encontrar otra herramienta interesante, no se ha actualizado en mucho tiempo, pero podría valer la pena echar un vistazo
Víctor López García
@JacobDorman Con DBVC, ¿puede fusionar con éxito los cambios de DB de diferentes entornos? He creado una estrategia propia , pero ¿DBVC produce los archivos de actualización o tiene que usar algo como mysqldiff entre volcados de SQL? No puedo imaginar que esta herramienta sea útil a menos que ayude a producir diferencias SQL que sean realmente comparables, especialmente los parámetros de la instrucción INSERT en líneas separadas ... aunque supongo que se podría editar un archivo para tratar eso ...
Spencer Williams
@SpencerWilliams No terminé usando DBVC (y no he usado mysqldiff) pero todavía agrego volcados db al control de versiones ... Realmente no los veo como fusionables en la mayoría de los casos, pero diferir usando más allá de comparar puede ayudar a resaltar cambios y problemas.
Jacob Dorman
@victor revisé MMP. Realiza cambios de esquema, pero no diferencia / inserta de datos.
David Silva Smith
2

Estoy haciendo esto en MYSQL.

Pone todas las tablas de esquema y datos en su propio archivo para que pueda ver fácilmente lo que ha cambiado.

A diferencia de la mayoría de las otras soluciones en este hilo, esta solución obtiene los datos, lo cual es importante para un CMS.

Esta solución no utiliza ninguna herramienta, solo un script de línea de comando.

editar: descubrí que mi código anterior tenía un error en el que el orden de importación era importante. quitándose la --compactbandera corrige el error.

for x in `mysql --skip-column-names -u root -ppassword dbname -e 'show tables;'`; do
     echo exporting $x
     mysqldump -u root -ppassword --skip-add-drop-table --skip-add-locks --skip-disable-keys --skip-set-charset --extended-insert=FALSE --replace --skip-dump-date dbname $x > "./db/$x.sql"
done

Código antiguo

for x in `mysql --skip-column-names -u root -ppassword dbname -e 'show tables;'`; do
     mysqldump -u root -ppassword --compact --extended-insert=FALSE --replace dbname $x > "./db/$x.sql"
done

y aquí está cómo importar

for x in `ls ./db/*.sql`; do
     echo importing $x
     mysql -pdbpassword dbname --force < $x
done
David Silva Smith
fuente