Ne treba svaki posao cijelu bazu podataka. Kad razvijate značajku lokalno, rijetko želite puni produkcijski dump koji vam puni disk i treba sat vremena za uvoz. Želite šačicu tablica koje značajka zapravo dodiruje.
Isto vrijedi kad otklanjate grešku u jednoj tablici — reprodukcija problema s podacima u orders ne zahtijeva ostale 126 tablica — ili radite djelomičnu migraciju, gdje se samo nekoliko tablica premješta u novu uslugu. U svim tim slučajevima pitanje je isto: kako da izvučem samo te tablice iz golemog dumpa, čisto i brzo?
Pristup sed/grep i zašto puca
Klasičan odgovor je izrezati datoteku pomoću sed-a između zaglavlja odjeljaka koje mysqldump zapisuje za svaku tablicu:
# izvuci tablicu users iz mysqldump datoteke
sed -n '/-- Table structure for table `users`/,/-- Table structure for table/p' dump.sql > users.sql
Izgleda domišljato, i na malom, urednom dumpu možda čak jednom i proradi. Na stvarnoj datoteci od 7 GB raspada se na mnogo suptilnih načina:
- Višeredni INSERT-ovi. Jedan
INSERT INTO ... VALUESmože se protezati kroz tisuće redaka. Alati orijentirani na retke poputsed-a igrep-a prepolove te retke i proizvedu datoteku koja se neće parsirati. - Backtickovi i posebni znakovi. Vrijednosti stupaca sadrže
--, točke sa zarezom, backtickove, navodnike i prijelome reda unutar stringova. Vaš uzorak podudara tekst unutar podataka koji nikad nije bio zamišljen kao razdjelnik. - Nazivi tablica kao podnizovi. Izdvajanje
usertakođer hvatauser_roles,user_sessionsipassword_user, jer se naziv pojavljuje kao podniz drugih. - Komentari i zaglavlja variraju. Točan tekst komentara razlikuje se između verzija MySQL-a, MariaDB-a i PostgreSQL-a, a
pg_dumpuopće ne koristi ista zaglavlja — pa ista naredba tiho ne vrati ništa. - Nema svijesti o vanjskim ključevima. Čak i ako savršeno izrežete
orders, njegovi reci referencirajuusers.sedto ne zna, pa se izdvojak ne uvozi zbog greške vanjskog ključa.
Na kraju gomilate awk na grep na sed, testirate na podskupovima i još uvijek ne vjerujete rezultatu. Postoji bolji način.
Izdvojite tablice s DumpCleanerom
DumpCleaner ispravno parsira dump — razumije granice naredbi, višeredne INSERT-ove, backtickove i komentare — pa uvijek reže na pravim retcima. Izdvajanje tablica koje trebate traje četiri koraka:
- Povucite svoj
.sqldump unutra. DumpCleaner protočno obrađuje datoteku, pa se dump od 7 GB otvara uz konstantnu memoriju umjesto učitavanja cijele stvari. - Pročitajte automatski otkriven popis tablica. Svaka je tablica isparsirana i navedena s brojem redaka i veličinom — nema pomicanja kroz milijune redaka da nađete što je unutra.
- Odaberite tablice koje želite. Označite
users,ordersiproducts, ili upišite regex / uzorak isključivanja poput*_logsda odbacite cijele grupe odjednom. - Uključite nadređene tablice vanjskih ključeva i izvezite. Po želji automatski povucite referencirane nadređene tablice, zatim izvezite čistu datoteku spremnu za uvoz.
Nekoliko stvari čini ovo puno manje petljanja od alata iz ljuske:
- Uzorci isključivanja poput
*_logsili*_sessionsuklanjaju šum revizija i sesija bez ručnog odznačivanja desetaka tablica. - Regex filtri omogućuju podudaranje po prefiksu, sufiksu ili bilo kojem uzorku — zadržite sve što odgovara
shop_*, na primjer. - Pretpregled uživo pokazuje točno koje će tablice završiti u izlazu dok mijenjate odabir.
- Procijenjena veličina izlaza kaže vam koliko će izdvojak biti velik prije izvoza, pa znate da će stati lokalno.
- Ovisnosti vanjskih ključeva mogu se uključiti automatski, pa odabir
orderstiho povlačiuserssa sobom i izdvojak se uvozi bez grešaka ograničenja.
Samo tablice koje trebate — ništa drugo
DumpCleaner izdvaja određene tablice iz dumpova bilo koje veličine — protočno, uz konstantnu memoriju i s vanjskim ključevima razriješenima umjesto vas. Nativna macOS i iPadOS aplikacija, jednokratna kupnja.
Preuzmi na App StoreuČesto postavljana pitanja
Mogu li izdvojiti više tablica odjednom?
Da. Označite koliko god tablica želite — users, orders i products zajedno — i DumpCleaner ih sve zapisuje u jednu datoteku u jednom prolazu.
Zadržava li ovisnosti vanjskih ključeva?
Po želji, da. Uključite uključi ovisnosti vanjskih ključeva i svaka nadređena tablica koju referencira vaš odabir automatski se povlači, pa se izdvojak uvozi bez grešaka ograničenja.
Mogu li isključiti tablice prema uzorku?
Da. Koristite uzorke isključivanja poput *_logs ili *_sessions, ili regularni izraz, da odbacite cijele grupe tablica umjesto da ih odznačavate jednu po jednu.
Radi li s PostgreSQL-om?
Da. DumpCleaner čita MySQL, MariaDB i PostgreSQL (pg_dump) dumpove i obrađuje nazive kvalificirane shemom poput public.users pri izdvajanju tablica.
Prestanite se boriti sa sed i grep
Povucite, odaberite svoje tablice, izvezite. DumpCleaner izvlači točno tablice koje trebate — s njihovim vanjskim ključevima — iz bilo kojeg dumpa.
Preuzmi na App Storeu