web-dev-qa-db-fra.com

Solution pour le contrôle et le déploiement de version de base de données?

Actuellement, j'utilise un script de vidage et valide la base de données dans le dépôt Git. --skip-extended-insert --skip-comments --skip-dump-date signifie qu'un diff peut me donner une idée juste de ce qui a changé, mais tout s'effondre si j'essaie de fusionner.

WP_SITEURL, WP_HOME et tous les autres emplacements Les magasins complets wordpress doivent être mis à jour lors de l'importation sur un autre hôte (test, transfert, production)

Est-ce que quelqu'un utilise une meilleure méthode?

Principaux problèmes:

  • Wordpress stocke les URL complètes tout au long de la base de données (non portable)
  • Beaucoup d'autres enregistrements non pertinents changent
    • valeurs auto_increment (je les supprime simplement, mais j'ai des problèmes d'identification)
    • les horodatages (peuvent également être supprimés potentiellement)
    • transitoire * enregistre ... aucune idée de ce qu'il faut en faire

Un processus créant des migrations horodatées, avec uniquement les éléments ajoutés ou supprimés, serait idéal ... mais je ne sais pas si c'est même possible?

11
Jacob Dorman

Voici deux solutions possibles. Il s’agit en réalité d’outils génériques de contrôle de version de MySQL, mais ils peuvent être adaptés à votre flux de travail:

dbv.php

Cet outil crée des "migrations", qui sont essentiellement des scripts SQL, à partir des modifications détectées dans la base de données. Ces scripts sont stockés dans un répertoire local et peuvent donc être validés sur votre VCS actuel (git, par exemple).

Il est utilisé via une interface Web PHP.

DBVC

Fondamentalement similaire à l'outil précédent, il est basé sur une interface de ligne de commande. Il est configuré via un fichier JSON. La principale différence est qu'il ne génère pas automatiquement les fichiers de migration.

Il y a un problème en suspens pour intégrer cela avec le précédent similaire, c'est donc quelque chose à rechercher.

Plugins Wordpress

Quelques plugins qui pourraient aider à la création d'un workflow reproductible:

4

Je le fais sur MYSQL.

Il met tous les schémas et les données des tables dans leur propre fichier afin que je puisse facilement voir ce qui a changé.

Contrairement à la plupart des autres solutions de ce fil, cette solution récupère les données, ce qui est important pour un CMS.

Cette solution n'utilise aucun outil, mais juste un script en ligne de commande.

edit: J'ai trouvé que mon ancien code avait un bogue où l'ordre d'importation était important. enlever le drapeau --compact corrige le bogue.

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

Ancien code

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

et voici comment importer

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