web-dev-qa-db-fra.com

Utiliser le contrôle de version (Git) sur une base de données MySQL

Je suis un WordPress Designer/Developer, qui s'implique de plus en plus dans l'utilisation du contrôle de version, notamment Git, bien que j'utilise SVN pour certains projets. J'utilise actuellement Beanstalk pour ma télécommande repo.

Ajouter tous les fichiers WordPress à mon dépôt n'est pas un problème, si je le voulais, je sais que je pourrais .gitignore le fichier wp-config, mais puisque je suis le seul développeur, actuellement, et ces projets sont en source fermée, cela n'a vraiment pas de sens.

WordPress s'appuie fortement sur la base de données, comme tout CMS, pour conserver le contenu textuel et de nombreux paramètres en fonction de la configuration spécifique du plugin/thème que j'utilise. Je me demande quelle serait la meilleure façon d'utiliser le contrôle de version sur la base de données, si c'est même possible. Je suppose que je pourrais faire un vidage SQL, bien que mon serveur MySQL fonctionne sur Windows (lire: je ne sais pas comment le faire), puis ajouter le vidage SQL à mon référentiel. Mais quand je pousse quelque chose en direct, cela pose d'énormes menaces pour la sécurité.

Y a-t-il une pratique acceptée de le faire?

60
Zach Russell

Vous pouvez sauvegarder votre base de données dans un référentiel git. Bien sûr, si vous placez les données dans git sous une forme binaire, vous perdrez toute la capacité de git à stocker efficacement les données à l'aide de diffs (changements). La meilleure pratique numéro un est donc celle-ci: stocker les données dans un format texte sérialisé.

mysqldump est un programme approprié pour vous y aider. Mais ce n'est pas parfait. Si quelque chose perturbe l'ordre de sérialisation des éléments (par exemple à la suite de la création de nouvelles tables, etc.), des ruptures artificielles entreront dans le diff. Cela diminuera l'efficacité du stockage. Vous pouvez écrire un sérialiseur personnalisé pour sérialiser les modifications uniquement - mais vous faites alors le travail acharné que git est déjà bon. Utilisez simplement le vidage sql.

Cela étant dit, ce que vous voulez faire n'est pas ce que les développeurs signifient normalement lorsqu'ils parlent de mettre la base de données dans git. Par exemple, si vous lisez le lien publié par @eggyal ( lien vers codinghorror ), vous verrez que ce qui est réellement placé dans git sont les scripts nécessaires pour générer la base de données initiale. Il peut y avoir des scripts supplémentaires, comme ceux pour remplir les données de la base de données avec un état propre, ou pour les remplir avec des données de test. Tous ces scripts sql sont des fichiers texte, et à peu près le même format que le vidage sql que vous obtiendriez de mysqldump. Il n'y a donc aucune raison que vous ne puissiez pas le faire de cette façon avec vos données quotidiennes également.

21
Kevin A. Naudé

Il n'y a pas beaucoup de logiciels disponibles pour les bases de données de contrôle de version comme MySQL et MongoDB.

Mais l'un est en cours de développement et la version bêta est sur le point d'être lancée prochainement. Découvrez Klonio - Contrôle de version pour les bases de données

9
Kevin

L'article Comment synchroniser un local et à distance WordPress utilisant le contrôle de version donne des conseils sur la façon d'automatiser la synchronisation entre deux instances (développement, production) d'un WordPress blog utilisant Mercurial. Mentionne que pour ce scénario, Git et Mercurial sont très similaires.

L'étape 4 (Synchronisation des bases de données) est intéressante ici.

Le contenu de la base de données sera exporté vers un fichier suivi par le contrôle de révision. Chaque fois que nous tirons des modifications, le contenu de la base de données sera remplacé par ce fichier, ce qui rend notre base de données à jour.

Ensuite, il développe les conflits et la partie script du travail.

Il existe un tutoriel de contrôle de version dans Mercurial , si vous ne le connaissez pas.

5
abanmitra

Sachez que Wordpress stocke tout le contenu du fil d'actualités dans la base de données, donc même si vous n'apportez aucune modification, il y aura beaucoup de changement de contenu.

0
Anonymous