Ci sono tre situazioni che ricorrono continuamente:
- Predisporre uno schema per staging o CI — vuoi la struttura vuota delle tabelle così i test possono girare contro colonne, indici e vincoli reali, ma non vuoi assolutamente riversare gigabyte di righe di produzione in un ambiente usa e getta.
- Solo dati di seed — lo schema esiste già nel database di destinazione e ti servono solo le righe INSERT per popolarlo, senza istruzioni CREATE che entrerebbero in conflitto con ciò che c'è.
- Eliminare il rumore — il dump è gonfiato da tabelle
logs,sessions,audit_trailocachecon decine di milioni di righe che non vuoi importare mai.
Perché mysqldump --no-data non basta
Il consiglio classico è mysqldump --no-data (solo struttura) o mysqldump --no-create-info (solo dati). Entrambi sono flag di export: cambiano ciò che contiene un dump nuovo da un database in esecuzione. Non fanno nulla per un dump che hai già lì sul disco come file .sql.
In pratica il file spesso arriva da qualcun altro, o da un job di backup, o da un server a cui non hai più accesso in tempo reale. Non puoi rieseguire mysqldump contro un database irraggiungibile — le credenziali sono sparite, il server è stato dismesso o il file è semplicemente tutto ciò che ti è stato dato. A quel punto i flag sono inutili e ti tocca modificare il file stesso.
Il metodo manuale
La mossa ovvia è togliere righe con grep o sed. Per tenere la struttura ed eliminare i dati:
# tieni tutto tranne le righe INSERT grep -v '^INSERT INTO' dump.sql > schema.sql # oppure tieni solo le righe INSERT per un file di soli dati grep '^INSERT INTO' dump.sql > data.sql
Sembra a posto su un dump piccolo e ordinato — e poi si rompe su uno vero:
- INSERT multiriga. Una singola
INSERT INTO … VALUESpuò estendersi su migliaia di righe.grepabbina la prima riga e lascia il resto dei valori orfani, producendo un file rotto. - Insert estese. mysqldump raggruppa molte righe in un'unica istruzione gigantesca. I filtri basati sulle righe non sanno dire dove finisce un'istruzione del genere.
- Commenti e blocchi. I blocchi condizionali
/*! … */, leLOCK TABLESe i commenti--si intrecciano con i dati, quindi un filtro ingenuo o tiene spazzatura o taglia qualcosa che serve all'import. - I soli dati sono peggio. Un puro
grep '^INSERT'butta via le istruzioniSETeLOCKda cui dipendono le righe, e ogni INSERT che non inizia esattamente alla colonna zero sparisce silenziosamente.
Finisci per fare il debug del tuo stesso filtro invece di ottenere il tuo schema.
Solo struttura o solo dati con DumpCleaner
DumpCleaner comprende le istruzioni SQL invece di abbinare righe, quindi separa struttura e dati in modo affidabile — su file di qualsiasi dimensione:
- Trascina il tuo dump
.sqlin DumpCleaner (MySQL, MariaDB o PostgreSQL). Analizza il file in streaming, quindi un dump di più gigabyte si carica con memoria costante. - Attiva i tipi di istruzione che vuoi: CREATE TABLE, CREATE INDEX, INSERT INTO, ALTER, DROP, LOCK, SET. Togli la spunta a INSERT INTO e ottieni solo la struttura; togli la spunta a CREATE TABLE / CREATE INDEX e ottieni solo i dati.
- Oppure scegli un preset — Solo struttura o Solo dati — per impostare ogni interruttore in un passaggio, poi affina per tabella se vuoi.
- Esporta. Ottieni un file di schema snello per staging o CI, oppure un dump pulito di soli dati per il seeding.
Poiché il filtro è consapevole delle istruzioni, una INSERT estesa multiriga viene tenuta o eliminata per intero — mai tagliata a metà.
La vera forza è che il filtraggio funziona per tipo di istruzione e per tabella, e i due si combinano. Puoi tenere la struttura di ogni tabella ma includere i dati INSERT solo per le tre tabelle che ti servono davvero — lasciando la tabella logs da 89 milioni di righe come un guscio vuoto. È qualcosa che nessun flag --no-data può esprimere.
Separa struttura e dati in pochi secondi
DumpCleaner filtra un dump esistente per tipo di istruzione e per tabella — solo struttura, solo dati o qualsiasi combinazione — in streaming, con memoria costante. App nativa per macOS e iPadOS, acquisto una tantum.
Scarica dall'App StoreDomande frequenti
Posso esportare i dati senza lo schema?
Sì. Disabilita CREATE TABLE e CREATE INDEX (o scegli il preset Solo dati) e tieni INSERT INTO. DumpCleaner esporta solo le righe, pronte da caricare in uno schema che esiste già.
Un export solo struttura mantiene indici e chiavi esterne?
Sì. Solo struttura mantiene CREATE TABLE, CREATE INDEX, ALTER TABLE e le definizioni di chiave esterna — tutto ciò che definisce il database. Vengono rimosse solo le righe di dati INSERT.
Posso mescolare — struttura per tutte le tabelle, dati per alcune?
Sì. Il filtraggio è per tipo di istruzione e per tabella, e i due si combinano. Tieni la struttura di ogni tabella ma includi i dati INSERT solo per le poche tabelle che ti servono davvero.
Funziona con PostgreSQL?
Sì. DumpCleaner legge dump MySQL, MariaDB e PostgreSQL e rileva il formato automaticamente, quindi gli export solo struttura e solo dati funzionano allo stesso modo per i file pg_dump.
Schema senza i dati — o dati senza lo schema
Trascina, attiva i tipi di istruzione, esporta. DumpCleaner divide qualsiasi dump esattamente nella parte che ti serve.
Scarica dall'App Store