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 🙂