Comparez deux bases de données MySQL

Je développe actuellement une application utilisant une firebase database MySQL.

La structure de la firebase database est toujours en mouvement et change au fur et à mesure du développement (je change ma copie locale, laissant celle du serveur de test uniquement).

Existe-t-il un moyen de comparer les deux instances de la firebase database pour voir s’il ya des modifications?

Bien que la simple suppression de la firebase database du serveur de test précédente ne pose pas de problème, les tests commençant à entrer des données de test peuvent s’avérer un peu compliqués.
Le même si plus se produira encore plus tard dans la production …

Existe-t-il un moyen simple de modifier progressivement la firebase database de production, de préférence en créant automatiquement un script pour le modifier?


Outils mentionnés dans les réponses:

  • Schéma de MySQL de Red-Gate et comparaison des données (Commercial)
  • Maatkit (maintenant Percona)
  • liquibase
  • Crapaud
  • Nob Hill Database Compare (Commercial)
  • MySQL Diff
  • SQL EDT (Commercial)

Si vous travaillez avec de petites bases de données, j’ai trouvé que mysqldump fonctionnait avec les --skip-comments et --skip-extended-insert pour générer des scripts SQL, puis exécuter diff sur les scripts SQL fonctionne très bien.

En ignorant les commentaires, vous évitez les différences inutiles, telles que le temps que vous avez passé avec la commande mysqldump. En utilisant la commande --skip-extended-insert vous vous assurez que chaque ligne est insérée avec sa propre instruction d’insertion. Cela élimine la situation dans laquelle un enregistrement nouveau ou modifié unique peut provoquer une réaction en chaîne dans toutes les futures instructions d’insertion. L’utilisation de ces options produit des sauvegardes plus volumineuses sans commentaires, ce qui n’est probablement pas une chose que vous souhaitez faire en production, mais pour le développement, cela devrait aller. J’ai mis des exemples des commandes que j’utilise ci-dessous:

 mysqldump --skip-comments --skip-extended-insert -u root -p dbName1>file1.sql mysqldump --skip-comments --skip-extended-insert -u root -p dbName2>file2.sql diff file1.sql file2.sql 

Toad for MySQL a des fonctionnalités de comparaison de données et de schémas, et je pense qu’il va même créer un script de synchronisation. Le meilleur de tous, c’est le freeware.

J’utilise un logiciel appelé Navicat pour:

  • Synchroniser les bases de données Live avec mes bases de données de test.
  • Montrer les différences entre les deux bases de données.

Ça coute de l’argent, c’est Windows et Mac seulement, et ça a une interface utilisateur capricieuse, mais j’aime ça.

Il existe un outil de synchronisation de schéma dans SQLyog (commercial) qui génère du SQL pour la synchronisation de deux bases de données.

entrer la description de l'image ici

À partir de la liste de comparaison des fonctionnalités, MySQL Workbench offre des fonctions Schema Diff et Schema Synchronization dans leur édition communautaire.

Il y a certainement beaucoup de façons, mais dans mon cas, je préfère la commande dump et diff. Voici donc un script basé sur le commentaire de Jared:

 #!/bin/sh echo "Usage: dbdiff [user1:pass1@dbname1] [user2:pass2@dbname2] [ignore_table1:ignore_table2...]" dump () { up=${1%%@*}; user=${up%%:*}; pass=${up##*:}; dbname=${1##*@}; mysqldump --opt --compact --skip-extended-insert -u $user -p$pass $dbname $table > $2 } rm -f /tmp/db.diff # Compare up=${1%%@*}; user=${up%%:*}; pass=${up##*:}; dbname=${1##*@}; for table in `mysql -u $user -p$pass $dbname -N -e "show tables" --batch`; do if [ "`echo $3 | grep $table`" = "" ]; then echo "Comparing '$table'..." dump $1 /tmp/file1.sql dump $2 /tmp/file2.sql diff -up /tmp/file1.sql /tmp/file2.sql >> /tmp/db.diff else echo "Ignored '$table'..." fi done less /tmp/db.diff rm -f /tmp/file1.sql /tmp/file2.sql 

Les commentaires sont les bienvenus 🙂

dbSolo, c’est payant mais cette fonctionnalité pourrait être celle que vous cherchez http://www.dbsolo.com/help/compare.html

Il fonctionne avec Oracle, Microsoft SQL Server, Sybase, DB2, Solid, PostgreSQL, H2 et MySQL texte alt

Si vous avez seulement besoin de comparer des schémas (et non des données) et d’avoir access à Perl, mysqldiff pourrait fonctionner. Je l’ai utilisé car il vous permet de comparer des bases de données locales à des bases de données distantes (via SSH). Vous n’avez donc pas à déranger les données.

http://adamspiers.org/computing/mysqldiff/

Il tentera de générer des requêtes SQL pour synchroniser deux bases de données, mais je ne lui fais confiance (ou aucun outil, en fait). Autant que je sache, il n’existe pas de méthode 100% fiable pour procéder au reverse engineering des modifications nécessaires à la conversion d’un schéma de firebase database en un autre, en particulier lorsque plusieurs modifications ont été apscopes.

Par exemple, si vous modifiez uniquement le type d’une colonne, un outil automatisé peut facilement deviner comment le recréer. Mais si vous déplacez également la colonne, la renommez et ajoutez ou supprimez d’autres colonnes, le mieux que tout progiciel puisse faire est de deviner ce qui est probablement arrivé. Et vous risquez de perdre des données.

Je suggère de garder une trace de toutes les modifications de schéma que vous apportez au serveur de développement, puis d’exécuter ces instructions manuellement sur le serveur live (ou de les déployer dans un script de mise à niveau ou une migration). C’est plus fastidieux, mais vos données restront en sécurité. Et au moment où vous commencez à autoriser les utilisateurs finaux à accéder à votre site, allez-vous réellement effectuer des modifications constantes de la firebase database?

vérifier: http://schemasync.org/ l’outil schemasync fonctionne pour moi, c’est un outil de ligne de commande qui fonctionne facilement en ligne de commande linux

Il existe un autre outil mysql-diff en ligne de commande open source:

http://bitbucket.org/stepancheg/mysql-diff/

Il existe un outil utile écrit en utilisant perl appelé Maatkit . Il dispose de plusieurs outils de comparaison et de synchronisation de bases de données, entre autres.

Comparaison SQL par RedGate http://www.red-gate.com/products/SQL_Compare/index.htm

DBDeploy pour faciliter la gestion des modifications de firebase database de manière automatisée http://dbdeploy.com/

Pour ma part, je commencerais par décharger les deux bases de données et faire la différence entre les vidages, mais si vous voulez générer automatiquement des scripts de fusion, vous allez vouloir obtenir un véritable outil.

Une simple recherche sur Google a permis de trouver les outils suivants:

  • MySQL Workbench , disponible dans les variantes Community (OSS) et Commercial.
  • Nob Hill compare la firebase database , disponible gratuitement pour MySQL.
  • Une liste d’autres outils de comparaison SQL.

Jetez un coup d’oeil à dbForge Data Compare pour MySQL . C’est un shareware avec une période d’essai gratuite de 30 jours. C’est un outil rapide de MySQL GUI pour la comparaison et la synchronisation des données, la gestion des différences de données et la synchronisation personnalisable.

dbForge Data Compare pour MySQL

Après des heures de recherche sur le Web pour un outil simple, j’ai réalisé que je ne cherchais pas dans Ubuntu Software Center. Voici une solution gratuite que j’ai trouvée: http://torasql.com/ Ils prétendent avoir une version pour Windows également, mais je ne l’utilise que sous Ubuntu.

Edit: 2015-Feb-05 Si vous avez besoin d’un outil Windows, TOAD est parfait et gratuit: http://software.dell.com/products/toad-for-mysql/

La bibliothèque de composants zêta apache est une bibliothèque polyvalente de composants faiblement couplés pour le développement d’applications basées sur PHP 5.

Composants eZ – DatabaseSchema vous permet de:

    .Créer / Enregistrer une définition de schéma de firebase database;
    .Comparez les schémas de firebase database;
    .Générer des requêtes de synchronisation;

Vous pouvez vérifier le tutoriel ici: http://incubator.apache.org/zetacomponents/documentation/trunk/DatabaseSchema/tutorial.html

Outil de comparaison et de synchronisation très facile à utiliser:
Base de données Comparer http://www.clevercomponents.com/products/dbcomparer/index.asp

Avantages:

  • vite
  • facile à utiliser
  • facile de sélectionner les modifications à appliquer

Désavantages:

  • ne synchronise pas la longueur aux minuscules ints
  • ne synchronise pas correctement les noms d’index
  • ne synchronise pas les commentaires

Je pense que Navicat for MySQL sera utile pour ce cas. Il prend en charge la synchronisation des données et des structures pour MySQL. entrer la description de l'image ici

Pour la première partie de la question, je fais juste un dump des deux et les diffère. Pas sûr de mysql, mais postgres pg_dump a une commande pour simplement sauvegarder le schéma sans le contenu de la table, vous pouvez donc voir si vous avez changé le schéma.

Je travaille avec l’équipe marketing de Nob Hill, je voulais vous dire que je serai heureux d’entendre vos questions, suggestions ou autre, n’hésitez pas à me contacter.

À l’origine, nous avons décidé de créer notre outil à partir de zéro, car s’il existe d’autres produits de ce type sur le marché, aucun ne fait le travail correctement. Il est assez facile de vous montrer les différences entre les bases de données. Faire une firebase database comme une autre est une autre. Une migration fluide, à la fois du schéma et des données, a toujours constitué un défi. Eh bien, nous l’avons réalisé ici.
Nous sums tellement convaincus que cela pourrait vous apporter une migration en douceur, que si ce n’est pas le cas – si les scripts de migration générés ne sont pas suffisamment lisibles ou ne fonctionnent pas pour vous, vous obtiendrez votre propre copie gratuite!

http://www.nobhillsoft.com/NHDBCompare.aspx