Toutes les tâches n'exigent pas la base entière. Quand vous développez une fonctionnalité en local, vous voulez rarement un dump de production complet qui remplit votre disque et met une heure à s'importer. Vous voulez la poignée de tables que la fonctionnalité utilise réellement.
Il en va de même quand vous déboguez une seule table — reproduire un problème de données dans orders n'exige pas les 126 autres tables — ou lors d'une migration partielle, où seules quelques tables passent vers un nouveau service. Dans tous ces cas, la question est la même : comment obtenir juste ces tables depuis un dump géant, proprement et rapidement ?
L'approche sed/grep et pourquoi elle échoue
La réponse classique consiste à découper le fichier avec sed entre les en-têtes de section que mysqldump écrit pour chaque table :
# extraire la table users d'un fichier mysqldump
sed -n '/-- Table structure for table `users`/,/-- Table structure for table/p' dump.sql > users.sql
Cela paraît astucieux, et sur un petit dump bien rangé cela peut même fonctionner une fois. Sur un vrai fichier de 7 Go, cela s'effondre de bien des façons subtiles :
- INSERT multilignes. Un seul
INSERT INTO ... VALUESpeut s'étendre sur des milliers de lignes. Les outils orientés lignes commesedetgrepcoupent ces lignes en deux et produisent un fichier qui ne s'analyse pas. - Backticks et caractères spéciaux. Les valeurs de colonnes contiennent
--, des points-virgules, des backticks, des guillemets et des retours à la ligne à l'intérieur des chaînes. Votre motif correspond à du texte à l'intérieur des données qui n'a jamais été prévu comme délimiteur. - Noms de tables en sous-chaîne. Extraire
userattrape aussiuser_roles,user_sessionsetpassword_user, car le nom apparaît comme sous-chaîne des autres. - Commentaires et en-têtes qui varient. Le texte exact des commentaires diffère selon les versions de MySQL, MariaDB et PostgreSQL, et
pg_dumpn'utilise pas du tout les mêmes en-têtes — si bien que la même commande ne renvoie silencieusement rien. - Aucune conscience des clés étrangères. Même si vous découpez
ordersparfaitement, ses lignes référencentusers.sedn'en a aucune idée, l'extrait échoue donc à l'import avec une erreur de clé étrangère.
Vous finissez par empiler awk sur grep sur sed, à tester sur des sous-ensembles, sans jamais faire confiance au résultat. Il existe une meilleure méthode.
Extraire des tables avec DumpCleaner
DumpCleaner analyse le dump correctement — il comprend les frontières des instructions, les INSERT multilignes, les backticks et les commentaires — si bien qu'il coupe toujours aux bonnes lignes. Extraire les tables dont vous avez besoin se fait en quatre étapes :
- Glissez votre dump
.sql. DumpCleaner parcourt le fichier en flux, un dump de 7 Go s'ouvre donc à mémoire constante au lieu de tout charger. - Lisez la liste des tables détectée automatiquement. Chaque table est analysée et listée avec son nombre de lignes et sa taille — plus besoin de faire défiler des millions de lignes pour savoir ce qui s'y trouve.
- Choisissez les tables voulues. Cochez
users,ordersetproducts, ou saisissez une expression régulière / un motif d'exclusion tel que*_logspour écarter des groupes entiers d'un coup. - Incluez les parents des clés étrangères et exportez. Récupérez éventuellement les tables parentes référencées automatiquement, puis exportez un fichier propre et importable.
Quelques éléments rendent cela bien moins laborieux que les outils shell :
- Les motifs d'exclusion comme
*_logsou*_sessionsretirent le bruit d'audit et de session sans décocher des dizaines de tables à la main. - Les filtres regex vous permettent de faire correspondre par préfixe, suffixe ou tout motif — par exemple, garder tout ce qui correspond à
shop_*. - Un aperçu en direct montre exactement quelles tables se retrouveront dans la sortie à mesure que vous modifiez la sélection.
- Une estimation de la taille de sortie vous indique le poids de l'extrait avant l'export, pour savoir qu'il tiendra en local.
- Les dépendances de clés étrangères peuvent être incluses automatiquement, si bien que choisir
ordersamène discrètementusersavec lui et l'extrait s'importe sans erreurs de contrainte.
Juste les tables dont vous avez besoin — rien d'autre
DumpCleaner extrait des tables précises de dumps de toute taille — en flux, à mémoire constante, et avec les clés étrangères résolues pour vous. Application native macOS & iPadOS, achat unique.
Télécharger sur l'App StoreQuestions fréquentes
Puis-je extraire plusieurs tables à la fois ?
Oui. Cochez autant de tables que vous voulez — users, orders et products ensemble — et DumpCleaner les écrit toutes dans un seul fichier en une passe.
Conserve-t-il les dépendances de clés étrangères ?
En option, oui. Activez inclure les dépendances de clés étrangères et toute table parente référencée par votre sélection est amenée automatiquement, si bien que l'extrait s'importe sans erreurs de contrainte.
Puis-je exclure des tables par motif ?
Oui. Utilisez des motifs d'exclusion tels que *_logs ou *_sessions, ou une expression régulière, pour écarter des groupes entiers de tables au lieu de les décocher une à une.
Est-ce que cela fonctionne avec PostgreSQL ?
Oui. DumpCleaner lit les dumps MySQL, MariaDB et PostgreSQL (pg_dump), et gère les noms qualifiés par schéma comme public.users lors de l'extraction des tables.
Arrêtez de vous battre avec sed et grep
Glissez, choisissez vos tables, exportez. DumpCleaner extrait exactement les tables dont vous avez besoin — avec leurs clés étrangères — de n'importe quel dump.
Télécharger sur l'App Store