web-dev-qa-db-fra.com

Existe-t-il un moyen de détecter les modifications apportées à la base de données par des extensions tierces?

Je travaille dans un environnement de développement/intégration/production et la promotion du code d’un environnement à l’autre a posé quelques problèmes, en particulier lorsque des mises à niveau vers Joomla et d’autres logiciels tiers sont requises.

Existe-t-il un moyen de savoir quelles instructions SQL ont été exécutées sur la base de données depuis une certaine date afin que je puisse les appliquer dans différents environnements, sans avoir à mettre à niveau chaque environnement?

7
ContextSwitch

La réponse simple est non.

La réponse étendue est que mysql peut enregistrer les requêtes, mais il a des limites et s'il existe une différence entre les environnements, les requêtes ne fonctionneront pas. Même avec cela, le seul moyen de le faire est de passer par le serveur lui-même, dans la mesure où, à ma connaissance, aucune journalisation spéciale n'est ajoutée à JDatabase (si un composant n'utilise pas JDatabase, le contrôle diminue encore davantage).

Avec ce qui précède, vous pouvez voir dans un monde parfait qu'il existe un moyen, mais si vous passez de dev à vivre, vous avez actuellement un site actif qui posait des requêtes par lui-même et il est "différent" de l'actuel dev/staging. version. Ainsi, si un utilisateur s'est inscrit sur le site en direct et que vous avez mis à niveau Joomla dans dev, la mise à jour de la table users ajoutera la nécessité d'ajouter manuellement cet utilisateur (la structure de la table pourrait également être modifiée). Imaginez maintenant que ce n’est pas un utilisateur, mais 10, voire 100, et que le processus ne peut pas être automatisé.

Joomla a quelques fonctionnalités de mise à jour Nice, permettant une version pour la version mysql update sur les tables, cela garantit que les tables conservent la structure dont les requêtes ont besoin, mais elle ne suit pas les insertions ou les mises à jour sur les tables, donc si vous mettez à jour dans un environnement de développement , le meilleur moyen de mettre à jour en production est simplement de suivre les mêmes étapes et de mettre à jour votre production.

À l'avenir, Joomla pourra peut-être suivre les modifications apportées à la base de données, ce qui vous permettra de synchroniser une version de production avec une version de développement. Toutefois, la quantité de travail nécessaire à la création de ce type est folle et aura un impact sur les performances. À l’heure actuelle, je ne crois pas qu’il soit prévu ou prévu de le faire.

9
Jordan Ramstad

Les bases de données ont tendance à être un gros problème avec tout développement de logiciel. Faire en sorte que les choses synchronisées soit une douleur majeure pour nous aussi, en particulier avec les sites de production et de mise en scène.

Une chose que j'ai commencé à regarder récemment mais pas encore implémentée est:

http://phinx.org/

Une autre solution médiocre consiste à exporter les schémas de base de données (si vous vous souciez de schémas, les données sont probablement des animaux différents), puis d'exécuter un diff sur les schémas de chaque base de données. Devrait révéler les différences entre assez facilement. Il ne vous reste alors qu’à consolider vos données. Avec cela, j'aurais tendance à dire: idéalement, vous ne devriez avoir à vous soucier que des données de votre environnement de production et à ce qu'elles restent synchronisées avec l'environnement de transfert. Ensuite, vous pouvez créer un bac à sable et jouer au développement si nécessaire.

4
Chad Windnagle