web-dev-qa-db-fra.com

Flux de travail DDL transactionnel pour MySQL

J'étais un peu surpris de découvrir que les déclarations DDL (alter table, create index etc) commettre implicitement la transaction en cours dans MySQL. En venant de MS SQL Server, la possibilité de faire des modifications de base de données dans une transaction localement (qui a ensuite été roulée) était une partie importante de mon flux de travail. Pour une intégration continue, la restauration a été utilisée si la migration hoquée pour une raison quelconque, de sorte qu'au moins nous n'avions pas quitté la base de données dans un état semi-migré.

Comment les gens résolvent-ils ces deux problèmes lors de l'utilisation de MySQL avec des migrations et une intégration continue?

25
sennett

Si vous parlez d'intégration continue, je suppose que c'est un environnement de développement. Dans ce cas, je dirais que la personne qui fait des changements structurels doit les tester pour ne pas casser les choses pour les autres, de la même manière que quelqu'un à la mise à jour d'une bibliothèque commune: Test dans votre propre sable avant de faire de tels changements.

Dans un processus de déploiement de production, vous passeriez généralement via Dev, QA ou même des environnements de pré-production pour tester vos modifications, de la même manière que vous le feriez pour tout changement de code.

Notez que ce n'est pas spécifique à MySQL: les bases de données Oracle se valiraient également implicitement lors de l'émission de "Table d'alimentation", etc.

Maintenant, si vous souhaitez vous protéger, vous pouvez bien sûr effectuer une sauvegarde à l'avance ou un instantané de LVM ou de système de fichiers si votre système peut le faire. Vous pouvez également avoir un esclave que vous pourriez retarder/arrêter de sécurité avant les opérations sensibles.

4
phil_w