Tre situasjoner dukker stadig opp:
- Sette opp et skjema for staging eller CI — du vil ha den tomme tabellstrukturen slik at tester kan kjøre mot ekte kolonner, indekser og begrensninger, men du vil absolutt ikke sende gigabyte med produksjonsrader inn i et bruk-og-kast-miljø.
- Kun seed-data — skjemaet finnes allerede i måldatabasen, og du trenger bare INSERT-radene for å fylle det, uten CREATE-setninger som ville kollidert med det som er der.
- Bli kvitt støy — dumpen er oppsvulmet av
logs-,sessions-,audit_trail- ellercache-tabeller med titalls millioner rader du aldri vil importere.
Hvorfor mysqldump --no-data ikke er nok
Det klassiske rådet er mysqldump --no-data (kun struktur) eller mysqldump --no-create-info (kun data). Begge er eksportflagg: de endrer hva en fersk dump fra en kjørende database inneholder. De gjør ingenting for en dump du allerede har liggende på disk som en .sql-fil.
I praksis kommer filen ofte fra noen andre, eller fra en sikkerhetskopieringsjobb, eller fra en server du ikke lenger har direkte tilgang til. Du kan ikke kjøre mysqldump på nytt mot en database som ikke er tilgjengelig — legitimasjonen er borte, serveren er avviklet, eller filen er rett og slett alt du fikk overlevert. På det punktet er flaggene ubrukelige, og du sitter igjen med å redigere selve filen.
Den manuelle måten
Det opplagte grepet er å fjerne linjer med grep eller sed. For å beholde strukturen og droppe dataene:
# behold alt unntatt INSERT-rader grep -v '^INSERT INTO' dump.sql > schema.sql # eller behold bare INSERT-radene for en fil med kun data grep '^INSERT INTO' dump.sql > data.sql
Dette ser greit ut på en liten, ryddig dump — og bryter så sammen på en ekte:
- Flerlinjers INSERT-er. En enkelt
INSERT INTO … VALUESkan strekke seg over tusenvis av linjer.grepmatcher den første linjen og lar resten av verdiene bli foreldreløse, noe som gir en ødelagt fil. - Utvidede inserts. mysqldump samler mange rader i én gigantisk setning. Linjebaserte filtre kan ikke se hvor en slik setning slutter.
- Kommentarer og blokker. Betingede
/*! … */-blokker,LOCK TABLESog---kommentarer flettes inn med dataene, så et naivt filter enten beholder søppel eller kutter bort noe importen trenger. - Kun data er verre. En ren
grep '^INSERT'kaster bortSET- ogLOCK-setningene radene avhenger av, og enhver INSERT som ikke starter nøyaktig på kolonne null forsvinner stille.
Du ender opp med å feilsøke ditt eget filter i stedet for å få skjemaet ditt.
Kun struktur eller kun data med DumpCleaner
DumpCleaner forstår SQL-setninger i stedet for å matche linjer, så den skiller struktur fra data pålitelig — på filer av enhver størrelse:
- Dra
.sql-dumpen din inn i DumpCleaner (MySQL, MariaDB eller PostgreSQL). Den parser filen ved å strømme, så en dump på flere gigabyte lastes med konstant minnebruk. - Slå av og på setningstypene du vil ha: CREATE TABLE, CREATE INDEX, INSERT INTO, ALTER, DROP, LOCK, SET. Fjern haken på INSERT INTO, så får du kun struktur; fjern haken på CREATE TABLE / CREATE INDEX, så får du kun data.
- Eller velg en forhåndsinnstilling — Kun struktur eller Kun data — for å sette hver bryter i ett steg, og finjuster så per tabell om du vil.
- Eksporter. Du får en slank skjemafil for staging eller CI, eller en ren dump med kun data for seeding.
Fordi filteret er setningsbevisst, beholdes eller droppes en flerlinjers utvidet INSERT som en helhet — aldri kuttet på midten.
Den virkelige styrken er at filtreringen fungerer per setningstype og per tabell, og de to kombineres. Du kan beholde strukturen til hver tabell, men inkludere INSERT-data bare for de tre tabellene du faktisk trenger — og la logs-tabellen på 89 millioner rader stå som et tomt skall. Det er noe intet --no-data-flagg kan uttrykke.
Skill struktur fra data på sekunder
DumpCleaner filtrerer en eksisterende dump etter setningstype og etter tabell — kun struktur, kun data, eller en hvilken som helst blanding — strømmende, med konstant minnebruk. Innebygd macOS- & iPadOS-app, engangskjøp.
Last ned i App StoreOfte stilte spørsmål
Kan jeg eksportere dataene uten skjemaet?
Ja. Deaktiver CREATE TABLE og CREATE INDEX (eller velg forhåndsinnstillingen Kun data) og behold INSERT INTO. DumpCleaner eksporterer bare radene, klare til å lastes inn i et skjema som allerede finnes.
Beholder en eksport med kun struktur indekser og fremmednøkler?
Ja. Kun struktur beholder CREATE TABLE, CREATE INDEX, ALTER TABLE og fremmednøkkeldefinisjonene — alt som definerer databasen. Bare INSERT-dataradene fjernes.
Kan jeg blande — struktur for alle tabeller, data for noen?
Ja. Filtreringen skjer per setningstype og per tabell, og begge kombineres. Behold strukturen til hver tabell, men inkluder INSERT-data bare for de få tabellene du faktisk trenger.
Fungerer dette med PostgreSQL?
Ja. DumpCleaner leser MySQL-, MariaDB- og PostgreSQL-dumper og oppdager formatet automatisk, så eksporter med kun struktur og kun data fungerer på samme måte for pg_dump-filer.
Skjema uten data — eller data uten skjema
Dra, slå av og på setningstypene, eksporter. DumpCleaner deler enhver dump i nøyaktig den delen du trenger.
Last ned i App Store