Question

Pour longtemps, nous avons tenu nos données dans le référentiel du projet. Nous avons tenu que tout sous les données / sql, et chaque table a son propre create_tablename.sql et data_tablename.sql fichiers.

Nous avons maintenant vient de déployer notre 2ème projet sur Scalr et nous avons réalisé que c'est un désordre bits.

La façon dont nous déployons:

Nous avons un « packageup » collection de scripts qui déchirent le projet en 3 archives (données, le code, les fichiers statiques) que nous avons ensuite stockons dans 3 seaux séparés sur S3.

Chaque fois qu'un rôle démarre, il télécharge un des fichiers (en fonction du rôle: données, nfs ou Web), puis un jeux de script « Décompresser » tout ce pour chaque rôle, charge les données dans mysql, met en place la nfs, etc.

Nous le faisons comme cela parce que nous ne voulons pas d'enregistrer des images de serveur, nous commençons toujours des instances de vanille sur lequel nous installons tout à partir de zéro en utilisant différents scripts construits en interne. Le temps de démarrage est pas un problème (nous avons un prêt à l'emploi ferme en 9 minutes).

Le problème est que c'est une douleur en essayant de trouver la bonne version de la base de données chaque fois que nous essayons d'installer une nouvelle version de développement (à tout moment, nous avons environ 4 dev construit pour un projet). En outre, git commence à étouffer une fois que nous entrons dans la production, comme les fichiers sql finissent par un total d'environ 500 Mo.

La question est:

Comment gérer tous les autres bases de données? Je cherchais quelque chose qui le rend facile de prendre des données sur la production en dev, et la migration des données aussi de dev en production, mais n'a pas trébuché sur quoi que ce soit.

Était-ce utile?

La solution

Vous devriez sérieusement jeter un oeil à dbdeploy (dbdeploy.com). Il est porté à de nombreuses langues, les principales étant Java et PHP. Il est intégré dans des outils tels que build-Ant et Phing, et permet le partage facile des soi-disant fichiers delta.

Un fichier delta se compose toujours d'une section de déploiement, mais peut aussi contenir une section d'annulation. Lorsque vous vous engagez votre fichier delta et un autre développeur vérifie dehors, il peut simplement exécuter dbdeploy et toutes les nouvelles modifications sont automatiquement appliquées à sa base de données.

J'utilise dbdeploy pour mon blog open source, vous pouvez jeter un oeil sur la façon dont les fichiers delta sont organisés: http://site.svn.dasprids.de/trunk/sql/deltas/

Autres conseils

Comment je comprends votre question principale est expirience d'autres personnes dans la migration de données SQL de dev en production.

J'utilise Microsoft SQL Server au lieu de My SQL, donc je ne suis pas sûr que mon expirience vous pouvez utiliser directement. Néanmoins, cette façon fonctionne très bien.

J'utilise l'édition Studio 2010 Ultimate visuel pour comparer les données dans deux bases de données. La même fonction existe également dans l'équipe Vinsual Studio Edition 2008 (ou édition de base de données). Vous pouvez lire http://msdn.microsoft.com/en-us/library /dd193261.aspx pour comprendre comment cela fonctionne. Vous pouvez comparer deux bases de données (dev et prod) et de générer un script SQL pour modifier les données. Vous pouvez facilement exclure des tables ou des colonnes de la comparer. Vous pouvez également examiner les résultats et d'exclure certaines entrées de génération du script. Donc, on peut générer facile et flexible des scripts qui peuvent utilisés pour le déploiement dØ des changements dans la base de données. Vous pouvez séparement comparer les données de deux bases de données de la sructure (schéma compareing). Ainsi, vous pouvez actualiser les données en dev avec les données de prod ou de générer des scripts qui base de données de prod modify à la dernière version de la base de données de dev. Je vous recommande de regarder ce caractéristiques et certains produits de http://www.red-gate.com/ (comme http://www.red-gate.com/products /SQL_Compare/index.htm ).

Consultez Capistrano . Il est un outil aux usages de la communauté Ruby pour le déploiement à différents environnements et je trouve vraiment utile.

Aussi, si votre déploiement commence à étouffer essayer un outil twitter appelé Assassiner .

Personnellement, je regarderais Toad

http://www.toadworld.com/

Moins de 10k;) ... analysera les structures de base de données, produire des scripts pour les modifier et également la migration des données

.

Une partie de la solution est de capturer la version de chacun de vos modules de code et leurs ressources de données en un seul endroit correspondant, et de les comparer pour assurer la cohérence. Par exemple, une augmentation du nombre de version de votre, par exemple, le module customer_comments exigera un fichier delta SQL correspondant à la mise à niveau des tables de DB pertinentes au numéro de version égale pour les données.

Pour un exemple, jetez un oeil à la core_resource Magento approche comme documenté par @AlanStorm.

Cordialement, JD

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top