Exporter uniquement le schéma (structure) d'un dump SQL

Vous avez un dump complet sur disque, mais vous ne voulez que la structure — CREATE TABLE, index, clés étrangères — sans les tables de logs de 89 millions de lignes. Ou l'inverse : juste les données, sans les instructions CREATE. Voici pourquoi les options de dump habituelles n'aident pas un fichier existant, et comment séparer structure et données en un clic.

Trois situations reviennent sans cesse :

Pourquoi mysqldump --no-data ne suffit pas

Le conseil classique est mysqldump --no-data (structure uniquement) ou mysqldump --no-create-info (données uniquement). Ce sont tous deux des options d'export : elles changent ce que contient un dump neuf issu d'une base en fonctionnement. Elles ne font rien pour un dump que vous avez déjà sur disque sous forme de fichier .sql.

En pratique, le fichier arrive souvent de quelqu'un d'autre, d'une tâche de sauvegarde, ou d'un serveur auquel vous n'avez plus d'accès en direct. Vous ne pouvez pas relancer mysqldump contre une base qui n'est pas joignable — les identifiants ont disparu, le serveur est décommissionné, ou le fichier est simplement tout ce qu'on vous a remis. À ce stade, les options sont inutiles, et il ne vous reste qu'à modifier le fichier lui-même.

La méthode manuelle

Le réflexe évident est de retirer des lignes avec grep ou sed. Pour garder la structure et supprimer les données :

# garder tout sauf les lignes INSERT
grep -v '^INSERT INTO' dump.sql > schema.sql

# ou ne garder que les lignes INSERT pour un fichier de données seul
grep '^INSERT INTO' dump.sql > data.sql

Cela paraît correct sur un petit dump bien rangé — puis se casse sur un vrai :

Vous finissez par déboguer votre propre filtre au lieu d'obtenir votre schéma.

Structure seule ou données seules avec DumpCleaner

DumpCleaner comprend les instructions SQL au lieu de faire correspondre des lignes, si bien qu'il sépare structure et données de façon fiable — sur des fichiers de toute taille :

  1. Glissez votre dump .sql dans DumpCleaner (MySQL, MariaDB ou PostgreSQL). Il analyse le fichier en flux, un dump de plusieurs gigaoctets se charge donc à mémoire constante.
  2. Activez les types d'instructions que vous voulez : CREATE TABLE, CREATE INDEX, INSERT INTO, ALTER, DROP, LOCK, SET. Décochez INSERT INTO et vous obtenez la structure seule ; décochez CREATE TABLE / CREATE INDEX et vous obtenez les données seules.
  3. Ou choisissez un préréglage — Structure seule ou Données seules — pour régler tous les interrupteurs d'un coup, puis affinez par table si vous le souhaitez.
  4. Exportez. Vous obtenez un fichier de schéma léger pour la préproduction ou la CI, ou un dump de données propre pour l'initialisation.

Comme le filtre est conscient des instructions, un INSERT étendu multiligne est gardé ou supprimé en entier — jamais coupé au milieu.

La vraie puissance réside dans le fait que le filtrage fonctionne par type d'instruction et par table, et que les deux se combinent. Vous pouvez garder la structure de chaque table mais n'inclure les données INSERT que pour les trois tables dont vous avez réellement besoin — laissant la table logs de 89 millions de lignes comme une coquille vide. C'est quelque chose qu'aucune option --no-data ne peut exprimer.

Séparez structure et données en quelques secondes

DumpCleaner filtre un dump existant par type d'instruction et par table — structure seule, données seules, ou tout mélange — en flux, à mémoire constante. Application native macOS & iPadOS, achat unique.

Télécharger sur l'App Store

Questions fréquentes

Puis-je exporter les données sans le schéma ?

Oui. Désactivez CREATE TABLE et CREATE INDEX (ou choisissez le préréglage Données seules) et gardez INSERT INTO. DumpCleaner exporte juste les lignes, prêtes à être chargées dans un schéma déjà existant.

Un export structure seule conserve-t-il les index et les clés étrangères ?

Oui. La structure seule garde CREATE TABLE, CREATE INDEX, ALTER TABLE et les définitions de clés étrangères — tout ce qui définit la base. Seules les lignes de données INSERT sont retirées.

Puis-je mélanger — structure pour toutes les tables, données pour certaines ?

Oui. Le filtrage se fait par type d'instruction et par table, et les deux se combinent. Gardez la structure de chaque table mais n'incluez les données INSERT que pour les quelques tables dont vous avez réellement besoin.

Est-ce que cela fonctionne avec PostgreSQL ?

Oui. DumpCleaner lit les dumps MySQL, MariaDB et PostgreSQL et détecte le format automatiquement, si bien que les exports structure seule et données seules fonctionnent de la même façon pour les fichiers pg_dump.

Le schéma sans les données — ou les données sans le schéma

Glissez, activez les types d'instructions, exportez. DumpCleaner divise n'importe quel dump en exactement la partie dont vous avez besoin.

Télécharger sur l'App Store