Udtræk en enkelt tabel fra en MySQL-dump

Du har en dump på 7 GB med 127 tabeller, men lokalt har du kun brug for tre af dem — users, orders, products. Her er, hvorfor de sædvanlige sed/grep-tricks går i stykker, og hvordan du trækker præcis de tabeller ud, du vil have (med deres foreign keys), på få klik.

Ikke enhver opgave kræver hele databasen. Når du bygger en funktion lokalt, ønsker du sjældent en fuld produktionsdump, der fylder din disk og tager en time at importere. Du vil have den håndfuld tabeller, funktionen faktisk berører.

Det samme gælder, når du fejlfinder en enkelt tabel — at genskabe et dataproblem i orders kræver ikke de andre 126 tabeller — eller laver en delvis migrering, hvor kun nogle få tabeller flytter til en ny tjeneste. I alle disse tilfælde er spørgsmålet det samme: hvordan får jeg bare disse tabeller ud af en kæmpe dump, rent og hurtigt?

sed/grep-tilgangen og hvorfor den går i stykker

Det klassiske svar er at skære filen op med sed mellem de sektionsoverskrifter, mysqldump skriver for hver tabel:

# træk users-tabellen ud af en mysqldump-fil
sed -n '/-- Table structure for table `users`/,/-- Table structure for table/p' dump.sql > users.sql

Det ser smart ud, og på en lille, ryddelig dump virker det måske endda én gang. På en rigtig fil på 7 GB falder det fra hinanden på mange subtile måder:

Du ender med at stable awk oven på grep oven på sed, teste på undermængder og stadig ikke stole på resultatet. Der findes en bedre måde.

Udtræk tabeller med DumpCleaner

DumpCleaner parser dumpen korrekt — den forstår sætningsgrænser, flerlinjede INSERTs, backticks og kommentarer — så den skærer altid på de rigtige linjer. At udtrække de tabeller, du har brug for, tager fire trin:

  1. Træk din .sql-dump ind. DumpCleaner streamer filen, så en dump på 7 GB åbnes med konstant hukommelse i stedet for at indlæse det hele.
  2. Læs den automatisk registrerede tabelliste. Hver tabel parses ud og listes med sit rækkeantal og størrelse — ingen scrolling gennem millioner af linjer for at finde, hvad der er der.
  3. Vælg de tabeller, du vil have. Sæt flueben ved users, orders og products, eller skriv et regex-/ekskluderingsmønster som *_logs for at droppe hele grupper på én gang.
  4. Inkludér foreign key-forældre og eksportér. Træk eventuelt refererede forældretabeller ind automatisk, og eksportér så en ren, importerbar fil.

Et par ting gør dette langt mindre fikset end shell-værktøjer:

Kun de tabeller, du har brug for — intet andet

DumpCleaner udtrækker bestemte tabeller fra dumps af enhver størrelse — streamende, med konstant hukommelse, og med foreign keys løst for dig. Native macOS- & iPadOS-app, engangskøb.

Hent i App Store

Ofte stillede spørgsmål

Kan jeg udtrække flere tabeller på én gang?

Ja. Sæt flueben ved så mange tabeller, du vil — users, orders og products sammen — og DumpCleaner skriver dem alle ind i én fil i én gennemgang.

Bevarer den foreign key-afhængigheder?

Valgfrit, ja. Slå inkludér foreign key-afhængigheder til, og enhver forældretabel refereret af dit valg trækkes ind automatisk, så udtrækket importeres uden constraint-fejl.

Kan jeg ekskludere tabeller efter mønster?

Ja. Brug ekskluderingsmønstre som *_logs eller *_sessions, eller et regulært udtryk, til at droppe hele grupper af tabeller i stedet for at fjerne fluebenet én ad gangen.

Virker det med PostgreSQL?

Ja. DumpCleaner læser MySQL-, MariaDB- og PostgreSQL-dumps (pg_dump) og håndterer skemakvalificerede navne som public.users, når tabeller udtrækkes.

Stop kampen med sed og grep

Træk, vælg dine tabeller, eksportér. DumpCleaner trækker præcis de tabeller ud, du har brug for — med deres foreign keys — af enhver dump.

Hent i App Store