Je développe actuellement une application utilisant une base de données MySQL.
La structure de la base de données est toujours en évolution et change pendant le développement (je change ma copie locale, en laissant celle sur le serveur de test seule).
Existe-t-il un moyen de comparer les deux instances de la base de données pour voir s'il y a eu des modifications?
Bien qu'actuellement, la simple suppression de la base de données du serveur de test soit correcte, alors que les tests commencent à entrer des données de test, cela pourrait devenir un peu délicat.
La même chose, bien que plus, se reproduira plus tard dans la production ...
Existe-t-il un moyen simple d'apporter des modifications incrémentielles à la base de données de production, de préférence en créant automatiquement un script pour le modifier?
Outils mentionnés dans les réponses:
- Comparaison du schéma et des données MySQL de Red-Gate (commercial)
- Maatkit (maintenant Percona)
- liquibase
- Crapaud
- Nob Hill Database Compare (Commercial)
- MySQL Diff
- SQL EDT (commercial)
Réponses:
Si vous travaillez avec de petites bases de données, j'ai trouvé l'exécution de mysqldump sur les deux bases de données avec les options
--skip-comments
et--skip-extended-insert
pour générer des scripts SQL, alors l'exécution de diff sur les scripts SQL fonctionne plutôt bien.En sautant les commentaires, vous évitez les différences inutiles telles que l'heure à laquelle vous avez exécuté la commande mysqldump. En utilisant la
--skip-extended-insert
commande, vous vous assurez que chaque ligne est insérée avec sa propre instruction d'insertion. Cela élimine la situation où un seul enregistrement nouveau ou modifié peut provoquer une réaction en chaîne dans toutes les instructions d'insertion futures. L'exécution de ces options produit des vidages plus volumineux sans commentaires, donc ce n'est probablement pas quelque chose que vous souhaitez faire en production, mais pour le développement, cela devrait être bien. J'ai mis des exemples des commandes que j'utilise ci-dessous:la source
mysqldump --opt --compact --skip-extended-insert -u user -p db table > file.sql
-d
,--no-data
peut intéresser ceux qui ont besoin d'une utilisation en production mais ne se soucient que du schémavimdiff
Toad pour 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. Mieux encore, c'est un logiciel gratuit.
la source
--run-all-tests --difftype sql --disable-binary-logging
options peut faire presque le même travail (sauf que la sortie est mélangée avec des commentaires et que les caractères spéciaux dans la chaîne ne sont pas échappés).J'utilise un logiciel appelé Navicat pour:
Cela coûte de l'argent, c'est Windows et Mac uniquement, et il a une interface utilisateur dingue, mais j'aime ça.
la source
Il existe un outil de synchronisation de schéma dans SQLyog (commercial) qui génère du SQL pour synchroniser deux bases de données.
la source
De la liste de comparaison des fonctionnalités ... MySQL Workbench propose Schema Diff et Schema Synchronization dans leur édition communautaire.
la source
Il y a certainement plusieurs 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:
Les commentaires sont les bienvenus :)
la source
dbSolo, c'est payant mais cette fonctionnalité est peut-être celle que vous recherchez http://www.dbsolo.com/help/compare.html
Il fonctionne avec Oracle, Microsoft SQL Server, Sybase, DB2, Solid, PostgreSQL, H2 et MySQL
la source
Si vous avez seulement besoin de comparer des schémas (pas de données) et d'avoir accès à Perl, mysqldiff peut 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 besoin de vous soucier de vider des 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 pas confiance (ni aucun outil, en fait). Pour autant que je sache, il n'existe aucun moyen fiable à 100% de rétroconcevoir les modifications nécessaires pour convertir un schéma de base de données en un autre, en particulier lorsque plusieurs modifications ont été apportées.
Par exemple, si vous modifiez uniquement le type d'une colonne, un outil automatisé peut facilement deviner comment recréer cela. 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 s'est probablement passé. 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 à la main sur le serveur en direct (ou de les rouler dans un script de mise à niveau ou une migration). C'est plus fastidieux, mais cela gardera vos données en sécurité. Et au moment où vous commencez à autoriser les utilisateurs finaux à accéder à votre site, allez-vous vraiment apporter des modifications lourdes constantes à la base de données?
la source
--hostN
et--userN
cela échouera en silence.Jetez un œil à http://www.liquibase.org/
la source
vérifier: http://schemasync.org/ l'outil schemasync fonctionne pour moi, c'est un outil en ligne de commande qui fonctionne facilement en ligne de commande linux
la source
Il existe un autre outil open-source mysql-diff en ligne de commande:
http://bitbucket.org/stepancheg/mysql-diff/
la source
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.
la source
Comparaison SQL par RedGate http://www.red-gate.com/products/SQL_Compare/index.htm
DBDeploy pour aider à la gestion des modifications de base de données de manière automatisée http://dbdeploy.com/
la source
Pour moi, je commencerais par vider les deux bases de données et différencier les vidages, mais si vous voulez des scripts de fusion générés automatiquement, vous allez vouloir obtenir un véritable outil.
Une simple recherche Google a révélé les outils suivants:
la source
Jetez un œil à dbForge Data Compare pour MySQL . C'est un shareware avec une période d'essai gratuite de 30 jours. Il s'agit d'un outil graphique MySQL rapide pour la comparaison et la synchronisation des données, la gestion des différences de données et la synchronisation personnalisable.
la source
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 également une version pour Windows, 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 source
La bibliothèque de composants apache zeta est une bibliothèque à usage général de composants à couplage lâche pour le développement d'applications basées sur PHP 5.
Composants eZ - DatabaseSchema vous permet de:
Vous pouvez consulter le didacticiel ici: http://incubator.apache.org/zetacomponents/documentation/trunk/DatabaseSchema/tutorial.html
la source
Outil de comparaison et de synchronisation très simple à utiliser:
Database Comparer http://www.clevercomponents.com/products/dbcomparer/index.asp
Avantages:
Désavantages:
la source
Je pense que Navicat pour MySQL sera utile dans ce cas. Il prend en charge la synchronisation des données et des structures pour MySQL.
la source
Pour la première partie de la question, je fais juste un cliché des deux et je les diffère. Je ne suis pas sûr de mysql, mais postgres pg_dump a une commande pour simplement vider le schéma sans le contenu de la table, donc vous pouvez voir si vous avez modifié le schéma.
la source
Je travaille avec l'équipe marketing de Nob Hill, je voulais vous dire que je serai heureux d'entendre vos questions, suggestions ou autre chose, n'hésitez pas à me contacter.
À l'origine, nous avons décidé de créer notre outil à partir de zéro, car bien qu'il existe d'autres produits de ce type sur le marché, aucun d'entre eux ne fait le travail correctement. Il est assez facile de vous montrer les différences entre les bases de données. C'est une tout autre chose de créer une base de données comme l'autre. La migration en douceur, à la fois du schéma et des données, a toujours été un défi. Eh bien, nous l'avons atteint ici.
Nous sommes tellement convaincus qu'il pourrait vous fournir une migration en douceur, que si ce n'était pas le cas - si les scripts de migration qu'il génère ne sont pas suffisamment lisibles ou ne fonctionnent pas pour vous, et nous ne pouvons pas le corriger en cinq jours ouvrables - vous obtiendrez votre propre exemplaire gratuit!
http://www.nobhillsoft.com/NHDBCompare.aspx
la source