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

11

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-datesignifie qu'un diff peut me donner une bonne idée de ce qui a changé, mais tout tombe si j'essaye de fusionner.

WP_SITEURL, WP_HOME et tous les autres endroits où Wordpress stocke les URL complètes doivent être mis à jour lors de l'importation vers un autre hôte (test, transfert, production)

Quelqu'un utilise-t-il une meilleure méthode?

Problèmes principaux:

  • Wordpress stocke des 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 rencontré des problèmes d'identification)
    • horodatages (peuvent également être supprimés, potentiellement)
    • enregistrements transitoires * ... aucune idée de ce qu'il faut en faire

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

Jacob Dorman
la source
Voulez-vous mettre à jour toutes les modifications de données ou uniquement les modifications de structure ? et c'est votre vrai TÂCHE D'AFFAIRES?
Lazy Badger
Lorsque vous apportez des modifications à Wordpress, comme Wordpress, il y a souvent des modifications de contenu et de configuration (données DB) ainsi que des modifications logiques (code). J'aimerais pouvoir versionner les deux. Les changements de structure seraient un bon début ... TÂCHE D'AFFAIRES: le client demande un nouveau widget. Installez le plugin sur le serveur intermédiaire, validez le dépôt -> Configurez le plugin et ajoutez un exemple de contenu -> une fois approuvé, apportez les modifications de code à la production, puis effectuez manuellement les mêmes modifications de données dans l'administration de la production.
Jacob Dorman
1
@JacobDorman J'essaie de résoudre exactement ce même problème. Avez-vous déjà trouvé quelque chose? Après quelques recherches, je commence à penser qu'un plugin personnalisé qui crée un script de mise à jour spécifique est en ordre (probablement pour exporter uniquement les modifications de configuration telles que les plugins installés et les options de configuration - et pas nécessairement les publications, les catégories et le contenu en général) . J'adorerais entendre si vous avez d'autres idées.
Víctor López García

Réponses:

4

Voici deux solutions possibles, les deux sont en fait des outils de contrôle de version MySQL génériques mais 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 dans 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:

Víctor López García
la source
dbvc ressemble au type d'outil que je cherchais. Merci!
Jacob Dorman
1
Je suis content que cela ait aidé. Je viens de trouver un autre outil intéressant, il n'a pas été mis à jour depuis un certain temps, mais cela pourrait valoir la peine de prendre un butin sur: github.com/idler/MMP
Víctor López García
@JacobDorman Avec DBVC, êtes-vous en mesure de fusionner avec succès les modifications de base de données provenant d'environnements différents? J'ai construit ma propre stratégie , mais DBVC produit-il les fichiers de mise à jour ou devez-vous utiliser quelque chose comme mysqldiff entre les vidages SQL? Je ne peux pas imaginer cet outil utile à moins qu'il aide à produire des différences SQL qui sont réellement comparables, en particulier INSÉRER les paramètres d'instruction sur des lignes distinctes ... bien que je suppose qu'un fichier pourrait être modifié pour y faire face ...
Spencer Williams
@SpencerWilliams Je n'ai pas fini par utiliser DBVC (et je n'ai pas utilisé mysqldiff) mais j'ajoute toujours des db db au contrôle de version ... Je ne les vois pas vraiment comme fusionnables dans la plupart des cas, mais différer en utilisant au-delà de comparer peut aider à mettre en évidence changements et problèmes.
Jacob Dorman
@victor J'ai vérifié MMP. Il modifie le schéma, mais pas les différences / insertions de données.
David Silva Smith
2

Je fais ça sur MYSQL.

Il place tous les schémas et 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 obtient les données, ce qui est important pour un CMS.

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

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

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

Code plus ancien

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
David Silva Smith
la source