Il s'agit de la commande mysqldbcompare qui peut être exécutée dans le fournisseur d'hébergement gratuit OnWorks en utilisant l'un de nos multiples postes de travail en ligne gratuits tels que Ubuntu Online, Fedora Online, l'émulateur en ligne Windows ou l'émulateur en ligne MAC OS
PROGRAMME:
Nom
mysqldbcompare - Comparez deux bases de données et identifiez les différences
SYNOPSIS
mysqldbcompare [Options] db1 [:db2] ...
DESCRIPTION
Cet utilitaire compare les objets et les données de deux bases de données pour trouver des différences. Ce
identifie les objets ayant des définitions différentes dans les deux bases de données et les présente dans
un format de choix de style diff. Les différences dans les données sont montrées en utilisant un
format de style diff. Les lignes modifiées ou manquantes sont affichées dans un format standard de GRID, CSV,
TAB ou VERTICAL.
Utilisez la notation db1:db2 pour nommer deux bases de données à comparer, ou bien simplement db1 à
comparer deux bases de données portant le même nom. Ce dernier cas est une notation de commodité pour
comparer des bases de données du même nom sur des serveurs différents.
La comparaison peut être exécutée avec deux bases de données de noms différents sur un même serveur en
en précisant uniquement le --serveur1 option. L'utilisateur peut également se connecter à un autre serveur en
spécifiant le --serveur2 option. Dans ce cas, db1 est extrait de server1 et db2 de
serveur2.
Les objets pris en compte dans la base de données comprennent des tables, des vues, des déclencheurs, des procédures,
fonctions et événements. Un décompte pour chaque type d'objet peut être affiché avec le -vv option.
Le contrôle est effectué à l'aide d'une série d'étapes appelées tests. Par défaut, l'utilitaire s'arrête
sur le premier test échoué, mais vous pouvez spécifier le --exécuter tous les tests possibilité de provoquer le
utilitaire pour exécuter tous les tests quel que soit leur état final.
Remarque : Utilisation --exécuter tous les tests peut produire des défaillances en cascade attendues. Par exemple, si la ligne
les nombres diffèrent entre deux tables comparées, la cohérence des données échouera également.
Les tests comprennent les éléments suivants:
1. Vérifiez les définitions de la base de données
Une vérification préalable de l'existence de la base de données garantit que les deux bases de données existent. S'ils le font
non, aucun traitement ultérieur n'est possible et le --exécuter tous les tests l'option est ignorée.
2. Vérifier l'existence d'objets dans les deux bases de données
Le test des objets dans les deux bases de données identifie les objets manquants dans une ou
une autre base de données. Les tests restants s'appliquent uniquement aux objets qui apparaissent dans les deux
bases de données. Pour sauter ce test, utilisez le --skip-object-comparer option. ça peut être utile
lorsqu'il y a des objets manquants connus parmi les bases de données.
3. Comparez les définitions d'objets
Les définitions (le CREATE énoncés) sont comparés et les différences sont présentées. À
sauter ce test, utilisez le --skip-diff option. Cela peut être utile quand il y a des objets
les différences de nom uniquement que vous souhaitez ignorer.
4. Vérifiez le nombre de lignes du tableau
Cette vérification garantit que les deux tables ont le même nombre de lignes. Cela ne garantit pas
que les données du tableau sont cohérentes. Il s'agit simplement d'une vérification superficielle pour indiquer
lignes manquantes dans une table ou l'autre. Le contrôle de cohérence des données identifie les
lignes manquantes. Pour sauter ce test, utilisez le --skip-row-count option.
5. Vérifier la cohérence des données du tableau
Cette vérification identifie à la fois les lignes modifiées ainsi que les lignes manquantes de l'un ou l'autre des
les tables dans les bases de données. Les lignes modifiées sont affichées sous forme de rapport de style diff avec
le format choisi (GRID par défaut) et les lignes manquantes sont également affichées à l'aide de la
format choisi. Pour sauter ce test, utilisez le --skip-data-check option.
Vous pouvez utiliser les options --skip-xxx pour exécuter un seul des tests. Cela pourrait être
utile lorsque vous travaillez pour synchroniser deux bases de données, pour éviter d'exécuter toutes les
les tests à plusieurs reprises au cours du processus.
Chaque test se termine par l'un des états suivants :
· pass
Le test a réussi.
· FAIL
Le test a échoué. Les erreurs sont affichées après la ligne d'état de test.
· SKIP
Le test a été ignoré en raison d'un prérequis manquant ou d'une option de saut.
· WARN
Le test a rencontré une erreur inhabituelle mais non fatale.
· -
Le test n'est pas applicable à cet objet.
Pour spécifier comment afficher la sortie de style diff, utilisez l'une des valeurs suivantes avec le
--typediff option:
· unifiée (Par défaut)
Afficher la sortie au format unifié.
· aux contextes
Afficher la sortie du format de contexte.
· différer
Affichez la sortie de format de style différent.
· sql
Afficher la sortie de l'instruction de transformation SQL.
Pour spécifier comment afficher la sortie pour les lignes modifiées ou manquantes, utilisez l'un des éléments suivants
valeurs avec le --format option:
· grille (Par défaut)
Affichez la sortie sous forme de grille ou de tableau comme celle du mysql moniteur.
· csv
Affichez la sortie au format de valeurs séparées par des virgules.
· languette
Affichez la sortie au format séparé par des tabulations.
· vertical
Afficher la sortie au format à une seule colonne comme celle de la commande \G pour le mysql
moniteur.
La --changes-pour L'option contrôle la direction de la différence (en spécifiant le
objet à transformer) soit dans le rapport de différence (par défaut) soit dans la transformation
rapport (désigné par le --difftype=sql option). Considérez la commande suivante :
mysqldbcompare --server1=root@host1 --server2=root@host2 --difftype=sql \
db1:dbx
La base de données la plus à gauche (db1) existe sur le serveur désigné par le --serveur1 option
(hôte1). La base de données la plus à droite (dbx) existe sur le serveur désigné par le --serveur2
option (hôte2).
· --changes-for=serveur1 : Produire une sortie qui montre comment faire les définitions de
objets sur server1 comme les définitions des objets correspondants sur server2.
· --changes-for=serveur2 : Produire une sortie qui montre comment faire les définitions de
objets sur server2 comme les définitions des objets correspondants sur server1.
La direction par défaut est server1.
Vous devez fournir des paramètres de connexion (utilisateur, hôte, mot de passe, etc.) pour un compte
qui dispose des privilèges appropriés pour accéder à tous les objets de l'opération.
Si l'utilitaire doit être exécuté sur un serveur sur lequel la journalisation binaire est activée et que vous ne
voulez que les étapes de comparaison soient enregistrées, utilisez le --disable-binary-logging option.
OPTIONS
mysqldbcompare accepte les options de ligne de commande suivantes :
· --tous, -a
Inclure toutes les bases de données. Ajouté dans la version-1.3.5.
· --aider
Affichez un message d'aide et quittez.
· --changes-for=
Spécifiez le serveur pour afficher les transformations pour correspondre à l'autre serveur. Par exemple, pour
voir la transformation pour transformer les définitions d'objet sur server1 pour correspondre à la
définitions correspondantes sur server2, utilisez --changes-for=serveur1. Les valeurs autorisées sont
server1 et server2. La valeur par défaut est server1.
· --difftype= , -ré
Spécifiez le format d'affichage des différences. Les valeurs de format autorisées sont unifiée, aux contextes,
différer et sql. La valeur par défaut est unifiée.
· --disable-binary-logging
Si la journalisation binaire est activée, désactivez-la pendant l'opération pour empêcher la comparaison
opérations d'être écrites dans le journal binaire. Remarque : Désactivation de la journalisation binaire
nécessite le SUPER privilège.
· --exclude= , -X
Excluez une ou plusieurs bases de données de l'opération en utilisant soit un nom spécifique tel que
db1 ou un modèle de recherche. Utilisez cette option plusieurs fois pour spécifier plusieurs
exclusions. Par défaut, les modèles utilisent des modèles de base de données tels que COMME. Avec le --expression régulière
option, les modèles utilisent des expressions régulières pour faire correspondre les noms. Ajouté dans la version-1.3.5.
· --format= , -F
Spécifiez le format d'affichage des lignes modifiées ou manquantes. Les valeurs de format autorisées sont
grille, csv, languette et vertical. La valeur par défaut est grille.
· --silencieux, -q
N'imprimez rien. Renvoie uniquement un code de sortie de réussite ou d'échec.
· --regexp, --basic-regexp, -G
Effectuez des correspondances de motifs à l'aide du REGEXP opérateur. La valeur par défaut est d'utiliser COMME pour
correspondant à. Ajouté dans la version-1.3.5.
· --run-all-tests, -t
Ne vous arrêtez pas à la première différence trouvée. Traiter tous les objets. Raccourci modifié de
-a à -t dans la version 1.3.5.
· --server1=
Informations de connexion pour le premier serveur au format :
<utilisateur>[ :passwd>]@hôte>[ :port>][ :douille>] ouchemin-de-connexion>[ :port>][ :douille>].
· --server2=
Informations de connexion pour le deuxième serveur au format :
<utilisateur>[ :passwd>]@hôte>[ :port>][ :douille>] ouchemin-de-connexion>[::port>][::douille>].
· --show-inverse
Produire un rapport de transformation contenant les instructions SQL pour conformer l'objet
définitions spécifiées à l'envers. Par exemple, si --changes-for est défini sur server1,
générer également la transformation pour server2. Remarque : Les modifications inverses sont annotées
et marqué comme commentaires.
· --skip-data-check
Ignorez le contrôle de cohérence des données.
· --skip-diff
Ignorez la vérification des différences de définition d'objet.
· --skip-object-comparer
Ignorez le contrôle de comparaison d'objets.
· --skip-row-count
Ignorez la vérification du nombre de lignes.
· --span-key-size=
Modifiez la taille de la clé utilisée pour comparer le contenu de la table. Une valeur plus élevée peut aider à
obtenir des résultats plus précis en comparant de grandes bases de données, mais peut ralentir l'algorithme.
La valeur par défaut est 8.
· --verbeux, -v
Spécifiez la quantité d'informations à afficher. Utilisez cette option plusieurs fois pour augmenter
la quantité d'informations. Par exemple, -v = verbeux, -vv = plus verbeux, -vvv =
déboguer.
· --version
Affichez les informations de version et quittez.
· --largeur=
Modifiez la largeur d'affichage du rapport de test. La valeur par défaut est de 75 caractères.
NOTES
L'utilisateur de connexion doit disposer des autorisations appropriées pour lire toutes les bases de données et tables
listé.
Pour le --typediff option, les valeurs autorisées ne sont pas sensibles à la casse. En outre,
les valeurs peuvent être spécifiées comme n'importe quel préfixe non ambigu d'une valeur valide. Par exemple,
--typediff=d spécifie le type différent. Une erreur se produit si un préfixe correspond à plusieurs
valeur valide.
Le chemin d'accès aux outils client MySQL doit être inclus dans la variable d'environnement PATH dans
afin d'utiliser le mécanisme d'authentification avec login-paths. Cela permettra à l'utilitaire de
utilisez les outils my_print_defaults qui sont nécessaires pour lire les valeurs du chemin de connexion à partir du
fichier de configuration de connexion (.mylogin.cnf).
Si un identifiant de base de données spécifié comme argument contient des caractères spéciaux ou est un
mot réservé, alors il doit être correctement cité avec des backticks (`). À leur tour, les noms
cités avec des backticks doivent également être cités avec des guillemets simples ou doubles selon le
système d'exploitation, c'est-à-dire (") sous Windows ou (') dans les systèmes autres que Windows, afin que le
utilitaires pour lire les identifiants entre guillemets comme un seul argument. Par exemple, pour
comparer une base de données avec le nom bizarre`db.name avec autre : bizarre`db.name, la paire de bases de données
doit être spécifié à l'aide de la syntaxe suivante (sous Windows) :
'`bizarre``db.name`:`other:weird``db.name`'.
EXEMPLES
Utilisez la commande suivante pour comparer les bases de données emp1 et emp2 sur le serveur local, et
exécuter tous les tests même si les tests précédents échouent :
$ mysqldbcompare --server1=root@localhost emp1:emp2 --run-all-tests
# server1 sur localhost : ... connecté.
# Vérification des bases de données emp1 sur server1 et emp2 sur server2
AVERTISSEMENT : objets dans server2:emp2 mais pas dans server1:emp1 :
DÉCLENCHEUR : trg
PROCÉDURE : p1
TABLEAU : t1
VUE : v1
Données de ligne définies
Type Nom de l'objet Vérification du nombre de différences
-------------------------------------------------- -------------------------
FONCTION f1 pass - -
TABLE départements réussite réussite ÉCHEC
Différences de données trouvées entre les lignes :
--- emp1.services
+++ emp2.departements
@@ -1,4 +1,4 @@
************************** 1. rangée ************************** ***
dept_no : d002
- dept_name : je ne sais pas
+ dept_name : Finances
1 rangées.
Lignes dans emp1.departments pas dans emp2.departments
************************** 1. rangée ************************** ***
dept_no : d008
dept_name : recherche
1 rangées.
Lignes dans emp2.departments pas dans emp1.departments
************************** 1. rangée ************************** ***
dept_no : d100
dept_name : stupide
1 rangées.
TABLE dept_manager passe passe passe
Échec du contrôle de cohérence de la base de données.
# ...terminé
Soit : deux bases de données avec la même disposition de table. Les données de chaque table contiennent :
mysql> sélectionnez * à partir de db1.t1 ;
+ --- + --------------- +
| un | b |
+ --- + --------------- +
| 1 | Essai 789 |
| 2 | Essai 456 |
| 3 | Essai 123 |
| 4 | Nouvelle ligne - db1 |
+ --- + --------------- +
4 lignes dans l'ensemble (0.00 sec)
mysql> sélectionnez * à partir de db2.t1 ;
+ --- + --------------- +
| un | b |
+ --- + --------------- +
| 1 | Essai 123 |
| 2 | Essai 456 |
| 3 | Essai 789 |
| 5 | Nouvelle ligne - db2 |
+ --- + --------------- +
4 lignes dans l'ensemble (0.00 sec)
Pour générer les instructions SQL pour les transformations de données afin de rendre db1.t1 identique à db2.t1,
utiliser le --changes-for=serveur1 option. Nous devons également inclure les -a possibilité de s'assurer que
le test de cohérence des données est exécuté. La commande suivante illustre les options utilisées et
un extrait des résultats générés :
$ mysqldbcompare --server1=root:root@localhost \
--server2=root:root@localhost db1:db2 --changes-for=server1 -a \
--difftype=sql
[...]
# Données de ligne définies
# Type Nom de l'objet Nombre de différences
Vérifier #
-------------------------------------------------- -----------------------
# TABLE t1 réussite réussite ÉCHEC
# # Transformations de données pour direction = server1 :
# Différences de données trouvées entre les lignes : UPDATE db1.t1 SET b = 'Test 123'
O a = '1'; MISE À JOUR db1.t1 SET b = 'Test 789' O a = '3'; EFFACER
DE db1.t1 O a = '4'; INSÉRER DANS db1.t1 (a, b) VALUES('5', 'Nouveau
ligne - db2');
# Le contrôle de cohérence de la base de données a échoué. # # ...terminé
De même, lorsque la même commande est exécutée avec --changes-for=serveur2 et --difftype=sql, un
le rapport suivant est généré :
$ mysqldbcompare --server1=root:root@localhost \
--server2=root:root@localhost db1:db2 --changes-for=server2 -a \
--difftype=sql
[...]
# Données de ligne définies
# Type Nom de l'objet Nombre de différences
Vérifier #
-------------------------------------------------- -----------------------
# TABLE t1 réussite réussite ÉCHEC
# # Transformations de données pour direction = server2 :
# Différences de données trouvées entre les lignes : UPDATE db2.t1 SET b = 'Test 789'
O a = '1'; MISE À JOUR db2.t1 SET b = 'Test 123' O a = '3'; EFFACER
DE db2.t1 O a = '5'; INSÉRER DANS db2.t1 (a, b) VALUES('4', 'Nouveau
ligne - db1');
Les --difftype=sql jeu d'options de génération SQL, --show-inverse montre l'objet
transformations dans les deux sens. Voici un extrait des résultats :
$ mysqldbcompare --server1=root:root@localhost \
--server2=root:root@localhost db1:db2 --changes-for=server1 \
--show-reverse -a --difftype=sql
[...]
# Données de ligne définies
# Type Nom de l'objet Nombre de différences
Vérifier #
-------------------------------------------------- -----------------------
# TABLE t1 réussite réussite ÉCHEC
# # Transformations de données pour direction = server1 :
# Différences de données trouvées entre les lignes : UPDATE db1.t1 SET b = 'Test 123'
O a = '1'; MISE À JOUR db1.t1 SET b = 'Test 789' O a = '3'; EFFACER
DE db1.t1 O a = '4'; INSÉRER DANS db1.t1 (a, b) VALUES('5', 'Nouveau
ligne - db2');
# Transformations de données pour direction = server2 :
# Différences de données trouvées entre les lignes : UPDATE db2.t1 SET b = 'Test 789'
O a = '1'; MISE À JOUR db2.t1 SET b = 'Test 123' O a = '3'; EFFACER
DE db2.t1 O a = '5'; INSÉRER DANS db2.t1 (a, b) VALUES('4', 'Nouveau
ligne - db1');
# Le contrôle de cohérence de la base de données a échoué. # # ...terminé
DROIT D'AUTEUR
Utilisez mysqldbcompare en ligne en utilisant les services onworks.net