Nous utilisons quelque chose de semblable à bcwoord pour garder nos schémas de base de données synchronisées à travers 5 différents types d'installations (production, mise en scène et un peu de développement des installations), et sauvegardés dans le contrôle de version, et ça marche plutôt bien. Je vais développer un peu:
Pour synchroniser la structure des bases de données, nous avons un seul script, update.php et un certain nombre de fichiers numérotés de 1.sql, 2.sql, 3.sql, etc. Le script utilise une table supplémentaire pour stocker le numéro de la version actuelle de la base de données. Le N. sql fichiers sont fabriqués à la main, pour aller à partir de la version (N-1) pour la version N de la base de données.
Ils peuvent être utilisés pour ajouter des tables, ajouter des colonnes, migrer des données à partir d'un ancien à un nouveau format de colonne puis déposez la colonne, insérer "maître" lignes de données tels que les types d'utilisateur, etc. Fondamentalement, il peut tout faire, et avec une bonne migration de données de scripts que vous ne serez jamais perdre de données.
Le script de mise à jour fonctionne comme ceci:
- Se connecter à la base de données.
- Faire une sauvegarde de la base de données actuelle (parce que les choses vont aller de mal) [mysqldump].
- Créer tenue de la comptabilité de table (appelée _meta) si elle n'existe pas.
- Lire la VERSION actuelle de _meta table. Supposons 0 si non trouvé.
- Pour tous les .sql fichiers numérotés de plus que la VERSION, de les exécuter dans l'ordre
- Si l'un des fichiers a produit une erreur: restaurer la sauvegarde
- Sinon, mise à jour de la version dans la tenue de livres de table à la plus élevée .fichier sql exécutée.
Tout se passe dans le contrôle de source, et chaque installation a un script pour mettre à jour vers la dernière version avec une seule exécution de script (appel update.php avec la bonne base de données de mot de passe etc.). Nous SVN update mise en scène et les environnements de production via un script qui appelle automatiquement la base de données le script de mise à jour, de sorte qu'un code de mise à jour est livré avec le nécessaire de base de données mises à jour.
On peut aussi utiliser le même script pour recréer la base de données entière à partir de zéro, nous venons de supprimer et recréer la base de données, puis exécutez le script qui va complètement à repeupler la base de données. On peut aussi utiliser le script pour remplir une base de données vide pour le test automatisé.
Il n'a fallu que quelques heures pour mettre en place ce système, c'est un concept simple et tout le monde obtient le schéma de numérotation des versions, et il a été d'une valeur inestimable dans le fait d'avoir la capacité d'aller de l'avant et de l'évolution de la conception de base de données, sans avoir à communiquer ou exécutez manuellement les modifications sur toutes les bases de données.
Attention lors du collage des requêtes à partir de phpMyAdmin! Ces requêtes générées comprennent généralement le nom de base de données, vous ne voulez certainement pas, car il va briser vos scripts! Quelque chose comme CREATE TABLE mydb
.newtable
(...) échouera si la base de données sur le système n'est pas appelé mydb. Nous avons créé un pré-commentaire SVN crochet qui va interdire .les fichiers sql contenant de l' mydb
chaîne de caractères, qui est un signe certain que quelqu'un copie/collé à partir de phpMyAdmin sans vérification appropriée.