Ne vsako opravilo potrebuje celotno bazo podatkov. Ko lokalno gradite funkcionalnost, redkokdaj želite, da vam poln produkcijski izvoz polni disk in za uvoz porabi celo uro. Želite le peščico tabel, ki se jih funkcionalnost dejansko dotika.
Enako velja, ko razhroščujete eno samo tabelo — za reprodukcijo težave s podatki v orders ne potrebujete drugih 126 tabel — ali izvajate delno migracijo, kjer se v novo storitev preseli le nekaj tabel. V vseh teh primerih je vprašanje enako: kako iz velikanskega izvoza dobim samo te tabele, čisto in hitro?
Pristop s sed/grep in zakaj se pokvari
Klasičen odgovor je, da datoteko razrežete s sed med glavami razdelkov, ki jih mysqldump zapiše za vsako tabelo:
# izvleci tabelo users iz mysqldump datoteke
sed -n '/-- Table structure for table `users`/,/-- Table structure for table/p' dump.sql > users.sql
Izgleda pametno in na majhnem, urejenem izvozu bi morda enkrat celo delovalo. Na pravi 7 GB datoteki pa razpade na veliko subtilnih načinov:
- Večvrstični INSERT stavki. En sam
INSERT INTO ... VALUESlahko obsega na tisoče vrstic. Vrstično usmerjena orodja, kot stasedingrep, te vrstice prepolovijo in ustvarijo datoteko, ki se ne razčleni. - Nazaj obrnjeni narekovaji in posebni znaki. Vrednosti stolpcev vsebujejo
--, podpičja, nazaj obrnjene narekovaje, narekovaje in prelome vrstic znotraj nizov. Vaš vzorec se ujema z besedilom znotraj podatkov, ki nikoli ni bilo mišljeno kot ločilo. - Imena tabel kot podnizi. Izvlečenje
userzajame tudiuser_roles,user_sessionsinpassword_user, ker se ime pojavi kot podniz drugih. - Komentarji in glave se spreminjajo. Natančno besedilo komentarjev se razlikuje med različicami MySQL, MariaDB in PostgreSQL,
pg_dumppa sploh ne uporablja enakih glav — zato isti ukaz tiho ne vrne ničesar. - Brez zavedanja tujih ključev. Tudi če
ordersrazrežete popolno, se njene vrstice sklicujejo nausers.sedo tem nima pojma, zato se izvleček ne uspe uvoziti zaradi napake tujega ključa.
Na koncu zlagate awk na grep na sed, preizkušate na podmnožicah in rezultatu še vedno ne zaupate. Obstaja boljši način.
Izvlecite tabele z DumpCleaner
DumpCleaner izvoz pravilno razčleni — razume meje stavkov, večvrstične INSERT stavke, nazaj obrnjene narekovaje in komentarje — zato vedno reže na pravih vrsticah. Izvlečenje potrebnih tabel poteka v štirih korakih:
- Povlecite svoj
.sqlizvoz noter. DumpCleaner datoteko pretaka, zato se 7 GB izvoz odpre s konstantnim pomnilnikom, namesto da bi naložil celoto. - Preberite samodejno zaznan seznam tabel. Vsaka tabela je razčlenjena in navedena s številom vrstic in velikostjo — nobenega drsenja skozi milijone vrstic, da bi našli, kaj je notri.
- Izberite želene tabele. Obkljukajte
users,ordersinproductsali vnesite vzorec regularnega izraza / izključitve, kot je*_logs, da naenkrat izpustite cele skupine. - Vključite nadrejene tabele tujih ključev in izvozite. Po želji samodejno pritegnite referencirane nadrejene tabele, nato izvozite čisto, uvozljivo datoteko.
Nekaj stvari to naredi precej manj zapleteno kot lupinska orodja:
- Vzorci izključitve, kot sta
*_logsali*_sessions, odstranijo šum revizij in sej, ne da bi ročno odkljukali na desetine tabel. - Filtri regularnih izrazov vam omogočajo ujemanje po predponi, priponi ali poljubnem vzorcu — na primer, obdržite vse, kar se ujema z
shop_*. - Predogled v živo prikaže natanko, katere tabele bodo pristale v izhodu, ko spreminjate izbor.
- Ocenjena velikost izhoda vam pove, kako velik bo izvleček, še preden izvozite, tako da veste, da se bo lokalno prilegal.
- Odvisnosti tujih ključev je mogoče vključiti samodejno, tako da izbor
orderstiho pripelje s sebojusersin se izvleček uvozi brez napak omejitev.
Samo tabele, ki jih potrebujete — nič drugega
DumpCleaner izvleče določene tabele iz izvozov katere koli velikosti — pretočno, s konstantnim pomnilnikom in z razrešenimi tujimi ključi. Domača aplikacija za macOS in iPadOS, enkraten nakup.
Prenesi v trgovini App StorePogosta vprašanja
Ali lahko naenkrat izvlečem več tabel?
Da. Obkljukajte poljubno število tabel — users, orders in products skupaj — in DumpCleaner jih v enem prehodu zapiše vse v eno datoteko.
Ali ohrani odvisnosti tujih ključev?
Po želji, da. Vklopite vključi odvisnosti tujih ključev in vsaka nadrejena tabela, ki jo referencira vaš izbor, se samodejno pritegne, tako da se izvleček uvozi brez napak omejitev.
Ali lahko izključim tabele po vzorcu?
Da. Uporabite vzorce izključitve, kot sta *_logs ali *_sessions, ali regularni izraz, da izpustite cele skupine tabel, namesto da bi jih odkljukali eno za drugo.
Ali deluje s PostgreSQL?
Da. DumpCleaner bere izvoze MySQL, MariaDB in PostgreSQL (pg_dump) ter pri izvlečenju tabel obvlada imena, kvalificirana s shemo, kot je public.users.
Nehajte se boriti s sed in grep
Povlecite, izberite tabele, izvozite. DumpCleaner iz katerega koli izvoza izvleče natanko tabele, ki jih potrebujete — skupaj z njihovimi tujimi ključi.
Prenesi v trgovini App Store