8
votes

Comment faire le contrôle de la version de base de données sans migration de cadre spécifique?

Je sais que la migration est une façon de faire le contrôle de la version sur le schéma de la base de données. Cependant, comme j'ai une base de données partagée par plusieurs projets et que chaque projet peut modifier un peu le schéma. Donc, j'aurais besoin de quelque chose comme une branche et une fonction de fusion comme Git pour les codes, où la migration ne peut pas donner une telle fonction. Ainsi, existe-t-il un outil de contrôle de version spécifiquement pour la base de données?

Nous utilisons PHP avec Laravel et MySQL pour la base de données et nous sommes disposés à passer à PostgreSQL si nécessaire.


1 commentaires

Je vous recommande de choisir un contrôle de source de base de données qui sera intégré avec le déploiement (signification, générant le script de déploiement) et pourra également le faire en fonction de la tâche à partir de votre système de gestion de tâches.


7 Réponses :


2
votes

dbv.php est une application de contrôle de la version de base de données que vous pourriez utiliser. ici est un article par point de site sur la façon de l'utiliser.


2 commentaires

Si vous êtes capable de donner un guide de départ facile, je préférerais choisir cette réponse pour la prime. De la description de la fonction dans le lien, il semble que c'est ce que je veux, mais je n'ai pas encore le temps d'essayer, alors une autre description m'aidera à juger si cela vaut une prime. En outre, il est difficile de convaincre les gens qu'une réponse avec seulement des liens mérite une prime.


@ user1273587 J'aimerais écrire un guide, mais je ne suis pas expérimenté avec la solution et que le guide que j'ai lié est si bien écrit, ma réponse serait simplement une réécriture de cet article. Je ne pense pas qu'il y a beaucoup plus que je puisse faire. Espérons que quelqu'un d'autre viendra et élargira la réponse.



7
votes

Vous pouvez configurer tous vos fichiers de configuration .sql code> dans le référentiel GIT pour le projet. Parce que vous avez mentionné de nombreux projets, utilisez cette base de données, il peut être judicieux d'utiliser un seul référentiel exclusivement em> pour la base de données:

considère que le répertoire suivant est géré par GIT: P>

setup.php
setup/
----- Create_database.sql
----- Create_users_table.sql
----- Create_posts_table.sql
----- Create_some_view.sql


2 commentaires

Comment gérez-vous l'ajout de la colonne de colonne ou de suppression? Il serait douloureux de laisser tomber la table et de construire à nouveau chaque fois que vous devez ajouter une colonne ou une colonne de suppression.


@ user1273587, je ne vois pas nécessairement comment il serait douloureux à moins que vous n'auriez pas essayé de reproduire toutes les données stockées dans la base de données (dans ce cas, vous pouvez ajouter un insertion_data.sql fichier). Le but est de pouvoir créer la base de données à partir de zéro sur une nouvelle machine ou revenir à un schéma précédent. Je modifierais le create_tables.sql pour l'ancien et émettre une instruction alter pour les bases de données existantes.



2
votes

Comme mentionné ci-dessus, il y a beaucoup d'outils d'outils. Personnellement, je suis allé chercher mon propre. J'utilise un API dBdeploy.

Cela fonctionne: écrivez vos scripts incrémentiels 1_c_table_t.sql 2_c_uk_index_t.sql ... Il nécessite une table dans la base de données où stocke tous les numéros de fichier. Après avoir inséré avec succès le SQL, il fait un insert dans une table de version.

Plusieurs équipes travaillant à ce que je crée un repo dans GitHub et que tous les dépendants dépendent de cela. API utilise le chiffre du poing pour identifier le script.

merci


1 commentaires

Les liens vers des outils tiers pour répondre aux questions sont généralement fronçés par la communauté de dépassement de la pile.



0
votes

J'ai travaillé pour une entreprise, qui avait des crochets sur notre serveur de contrôle source, qui, sur un commit, dirigerait un script, qui, à son noyau, a créé une décharge de schéma MySQL à partir de nos bases de données de développement et de stadification, et de la difforme entre celles Schemas, il créerait un script SQL qui s'ils sont exécutés, permettraient une troisième base de données (une copie de la mise en scène) à modifier pour produire une base de données avec le même schéma que DEV, mais contenant toutes les données sur la mise en scène. Il exécuterait ensuite tous les tests et s'ils réussiraient, il présenterait le script SQL Delta, comme sûr de fonctionner à la production.
Tant que vous avez un événement, à quel point vous pourriez exécuter un script, vous pouvez également générer un script SQL, qui déplace le schéma vers l'avant vers le nouveau delta.
L'alternative serait simplement de garder une trace du schéma SQL, dans le contrôle de la version à chaque changement, mais cela signifierait alors que cela aurait besoin d'un humain pour travailler (à partir du diffus unifié), ce que SQL serait nécessaire pour mettre en œuvre le changement .


4 commentaires

Je dirais que cela est le plus proche de ce que je veux, mais en même temps cette réponse suggère que je ne peux écrire que si je veux la fonction?


Oui, mais générer un script SQL Delta à partir de 2 schémas n'est pas si difficile, si vous avez un crochet pouvant exécuter un script shell au bon moment. Il y a probablement des outils ou des scripts là-bas pour générer un delta ou vous chercher la plupart du temps. MySqldump vous donnera le schéma dans un format prévisible, si vous éteignez la partie de données, et les options spécifiques MySQL, de ce qui reste est relativement facile à analyser.


Si vous devez écrire le script pour vous-même, cela vaut la peine de garder à l'esprit, si vous créez 2 bases de données à partir du même vidage, sur le même serveur MySQL, puis lorsque vous générez des décharges de nouveaux schémas, ils seront commandés de la même manière. Tant que vous n'ajoutez que dans les schémas (dans le même ordre) et que vous ne laissez pas tomber / recharger un et non l'autre, ils resteront commandés de la même manière, d'où les schémas peuvent simplement être comparés comme un fichier de chaîne dans des sections. . Le plus rapide serait de générer une diff, puis d'analyser les bits appropriés du schéma, mais ce serait probablement le script le plus complexe.


Le moyen le plus simple est probablement du script générant une liste de fonctions de table, ainsi que des numéros de ligne, et donc l'extraction de script d'extraction des sections de table de chaque schéma et les comparant séparément, pour voir si vous devez générer une section de table Alter, pour chaque nouveau. Colonne que vous créez, et vous devez être assez strict dans la ne pas supprimer ou modifier les colonnes existantes, le delta a donc toujours été ajouté au schéma, car le schéma de changement pourrait être dangereux, il faut donc toujours être fait manuellement.



1
votes

vous pouvez essayer Phinx i Utilisez actuellement dbv.php comme mentionné dans une autre réponse, mais Phinx semble avoir plus avancé options qui peuvent vous aider à atteindre vos objectifs. Il est possible de trouver la documentation ici http://docs.phinx.org/en/latest/ et il y a un exemple de projet à travers l'auteur ici < / p>


1 commentaires

Phinx exige que Zend Cadre, et semble être juste un autre plugin de migration comme celui donné par Laravel. dbv.php semble ce que je veux, mais ce serait génial si je peux avoir une aide supplémentaire pour commencer à l'utiliser.



0
votes

La réponse est simple. Utilisez simplement un fichier .SQL spécifiant le schéma de base de données. Branchez et modifiez le fichier .sql différent selon vos besoins. Vous pouvez spécifier tout ce dont vous avez besoin comme création de la base de données et des tables.

Si vous avez besoin de quelque chose pour commencer, vous pouvez faire un mysqldump sur votre dB et commencer avec cela. Après avoir eu le fichier dans la branche de contrôle source et la fusion est simple après cela.

Une autre option serait de créer votre DB DB de base, puis de disposer de divers scripts alters pouvant personnaliser la DB pour répondre à vos besoins. Demandez aux différents projets charger le déchargement de la DB, puis appliquez les scripts appropriés.


0 commentaires

1
votes

Utilisation d'un outil tel que Phinx, vous pouvez avoir beaucoup plus d'options et de fonctionnalités. Lien vers GitHub Repository https://github.com/robmorgan/phinx


0 commentaires