Mysql : identifier les tables manquantes entre 2 bases de données

Cet article est assez ancien, malgré toute l'attention que j' apporte à mes contenus il est possible que celui-ci ne soit plus d'actualité.
N'hésitez pas à me le signaler si nécessaire via le formulaire de contact.

Un petit article pratique assez générique pour une fois.

Pour un projet récent il fallait que je puisse détecter les tables manquantes entre une base de données « native » et la base de données du projet.

Il existe un certain nombre de logiciels qui le permettent mais je n’en avais pas sous la main.
Navicat permets d’identifier les tables concernées mais pas d’en exporter la liste.

La solution donnée ici permettra de faire tout en ligne de commandes ( linux )

J’ai utilisé l’outil https://github.com/DBDiff/DBDiff comme base.

Il faut commencer par télécharger le phar

wget https://github.com/DBDiff/DBDiff/releases/download/v1.0.0/dbdiff.phar

Ajouter les droits d’exécution au fichier.
Il faut ensuite configurer une connexion pour l’outil dbdiff ( dans le même dossier ou vous allez placer le phar )
Pour cela il faut créer un fichier .dbdiff ( attention au . devant ) avec les identifiants de connexions

server1:
  user: user
  password: password
  port: 3306 # for MySQL this is 3306
  host: 127.0.0.1 # usually localhost or 127.0.0.1
#Mettre la configuration des autres serveurs si nécessaires
server x:

L’outil dbdiff permets ensuite de générer nativement un fichier sql récapitulatif des différences via la commande :

./dbdiff.phar server1.db1:db2

Ceci fait déjà une partie du travail , mais en jouant avec la console il est possible d’obtenir directement la liste des tables concernées écrites dans un fichier 🙂

./dbdiff.phar server1.db1:db2 && cat ./migration.sql | grep "CREATE TABLE" | sed -e "s/CREATE TABLE \`//g" | sed -e "s/\` (//g" | sort >> diff_tables.txt

Plus qu’a aller voir le fichier diff_tables.txt pour avoir la liste des tables qui changent 🙂

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *