Ikke hver jobb trenger hele databasen. Når du bygger en funksjon lokalt, vil du sjelden ha en full produksjonsdump som fyller disken din og tar en time å importere. Du vil ha den håndfullen tabeller funksjonen faktisk berører.
Det samme gjelder når du feilsøker en enkelt tabell — å gjenskape et dataproblem i orders krever ikke de andre 126 tabellene — eller gjør en delvis migrering, der bare noen få tabeller flyttes til en ny tjeneste. I alle disse tilfellene er spørsmålet det samme: hvordan får jeg bare disse tabellene ut av en gigantisk dump, rent og raskt?
sed/grep-tilnærmingen og hvorfor den bryter sammen
Det klassiske svaret er å skjære opp filen med sed mellom seksjonsoverskriftene mysqldump skriver for hver tabell:
# trekk users-tabellen ut av en mysqldump-fil
sed -n '/-- Table structure for table `users`/,/-- Table structure for table/p' dump.sql > users.sql
Det ser smart ut, og på en liten, ryddig dump kan det til og med fungere én gang. På en ekte 7 GB-fil faller det fra hverandre på mange subtile måter:
- Flerlinjers INSERT-er. En enkelt
INSERT INTO ... VALUESkan strekke seg over tusenvis av linjer. Linjeorienterte verktøy somsedoggrepkutter disse radene i to og produserer en fil som ikke lar seg parse. - Bakticks og spesialtegn. Kolonneverdier inneholder
--, semikolon, bakticks, anførselstegn og linjeskift inne i strenger. Mønsteret ditt matcher tekst inne i data som aldri var ment å være en skilletegn. - Tabellnavn som delstrenger. Å trekke ut
userfanger ogsåuser_roles,user_sessionsogpassword_user, fordi navnet opptrer som en delstreng av andre. - Kommentarer og overskrifter varierer. Den nøyaktige kommentarteksten varierer mellom MySQL-, MariaDB- og PostgreSQL-versjoner, og
pg_dumpbruker ikke de samme overskriftene i det hele tatt — så den samme kommandoen returnerer stille ingenting. - Ingen fremmednøkkelbevissthet. Selv om du skjærer ut
ordersperfekt, refererer radene dens tilusers.sedaner ingenting, så uttrekket klarer ikke å importeres og gir en fremmednøkkelfeil.
Du ender opp med å stable awk oppå grep oppå sed, teste på delmengder, og fortsatt ikke stole på resultatet. Det finnes en bedre måte.
Trekk ut tabeller med DumpCleaner
DumpCleaner parser dumpen ordentlig — den forstår setningsgrenser, flerlinjers INSERT-er, bakticks og kommentarer — så den kutter alltid på de riktige linjene. Å trekke ut tabellene du trenger tar fire steg:
- Dra
.sql-dumpen din inn. DumpCleaner strømmer filen, så en 7 GB-dump åpnes med konstant minnebruk i stedet for å laste inn det hele. - Les den automatisk oppdagede tabellisten. Hver tabell parses ut og listes med sitt radtall og størrelse — ingen rulling gjennom millioner av linjer for å finne ut hva som er der.
- Velg tabellene du vil ha. Kryss av
users,ordersogproducts, eller skriv inn et regex-/ekskluderingsmønster som*_logsfor å droppe hele grupper på én gang. - Inkluder fremmednøkkelforeldre og eksporter. Trekk eventuelt inn refererte foreldretabeller automatisk, og eksporter så en ren, importerbar fil.
Noen ting gjør dette mye mindre fikkete enn skallverktøy:
- Ekskluderingsmønstre som
*_logseller*_sessionsfjerner revisjons- og øktstøy uten å måtte fjerne haken på dusinvis av tabeller for hånd. - Regex-filtre lar deg matche etter prefiks, suffiks eller et hvilket som helst mønster — behold for eksempel alt som matcher
shop_*. - En sanntidsforhåndsvisning viser nøyaktig hvilke tabeller som havner i utdataene etter hvert som du endrer utvalget.
- En estimert utdatastørrelse forteller deg hvor stort uttrekket blir før du eksporterer, så du vet at det får plass lokalt.
- Fremmednøkkelavhengigheter kan inkluderes automatisk, så å velge
orderstar diskret med segusers, og uttrekket importeres uten begrensningsfeil.
Bare tabellene du trenger — ingenting annet
DumpCleaner trekker ut bestemte tabeller fra dumper av enhver størrelse — strømmende, med konstant minnebruk, og med fremmednøkler løst for deg. Innebygd macOS- & iPadOS-app, engangskjøp.
Last ned i App StoreOfte stilte spørsmål
Kan jeg trekke ut flere tabeller på én gang?
Ja. Kryss av så mange tabeller du vil — users, orders og products sammen — og DumpCleaner skriver dem alle inn i en enkelt fil i én omgang.
Beholder den fremmednøkkelavhengigheter?
Valgfritt, ja. Slå på inkluder fremmednøkkelavhengigheter, og enhver foreldretabell som refereres av utvalget ditt trekkes inn automatisk, så uttrekket importeres uten begrensningsfeil.
Kan jeg ekskludere tabeller etter mønster?
Ja. Bruk ekskluderingsmønstre som *_logs eller *_sessions, eller et regulært uttrykk, for å droppe hele grupper av tabeller i stedet for å fjerne haken én om gangen.
Fungerer det med PostgreSQL?
Ja. DumpCleaner leser MySQL-, MariaDB- og PostgreSQL-dumper (pg_dump), og håndterer skjemakvalifiserte navn som public.users når den trekker ut tabeller.
Slutt å slåss med sed og grep
Dra, velg tabellene dine, eksporter. DumpCleaner trekker ut nøyaktig de tabellene du trenger — med fremmednøklene deres — ut av enhver dump.
Last ned i App Store