Jokainen työ ei tarvitse koko tietokantaa. Kun rakennat ominaisuutta paikallisesti, haluat harvoin täyttä tuotantodumppia täyttämässä levyäsi ja vievän tunnin tuoda. Haluat sen kourallisen tauluja, joita ominaisuus oikeasti koskettaa.
Sama pätee kun selvität yhden taulun vikaa — orders-taulun dataongelman toistaminen ei vaadi muita 126 taulua — tai teet osittaista migraatiota, jossa vain muutama taulu siirtyy uuteen palveluun. Kaikissa näissä tapauksissa kysymys on sama: kuinka saan juuri nämä taulut ulos jättidumpista, puhtaasti ja nopeasti?
sed/grep-lähestymistapa ja miksi se hajoaa
Klassinen vastaus on viiltää tiedosto sed:llä osioiden otsikoiden välistä, jotka mysqldump kirjoittaa jokaiselle taululle:
# vedä users-taulu ulos mysqldump-tiedostosta
sed -n '/-- Table structure for table `users`/,/-- Table structure for table/p' dump.sql > users.sql
Se näyttää nokkelalta, ja pienessä, siistissä dumpissa se saattaa jopa toimia kerran. Oikeassa 7 Gt:n tiedostossa se hajoaa monilla hienovaraisilla tavoilla:
- Moniriviset INSERTit. Yksi
INSERT INTO ... VALUESvoi ulottua tuhansien rivien yli. Riviperustaiset työkalut kutensedjagrepleikkaavat nuo rivit puoliksi ja tuottavat tiedoston, joka ei jäsenny. - Gravikset ja erikoismerkit. Sarakearvot sisältävät
--, puolipisteitä, graviksia, lainausmerkkejä ja rivinvaihtoja merkkijonojen sisällä. Kuviosi täsmää tekstiin datan sisällä, jota ei koskaan tarkoitettu erottimeksi. - Taulujen nimet osamerkkijonoina. Taulun
userpoimiminen kaappaa myösuser_roles-,user_sessions- japassword_user-taulut, koska nimi esiintyy muiden osamerkkijonona. - Kommentit ja otsikot ajautuvat. Tarkka kommenttiteksti vaihtelee MySQL:n, MariaDB:n ja PostgreSQL:n versioiden välillä, eikä
pg_dumpkäytä samoja otsikoita lainkaan — joten sama komento palauttaa hiljaa tyhjän. - Ei viiteavaintietoisuutta. Vaikka viiltäisit
orders-taulun täydellisesti, sen rivit viittaavatusers-tauluun.sedei tiedä siitä mitään, joten poiminta ei tuoda viiteavainvirheen takia.
Päädyt kasaamaan awk:ia grep:in päälle sed:in päälle, testaamaan osajoukoilla, etkä silti luota tulokseen. On parempi tapa.
Poimi taulut DumpCleanerilla
DumpCleaner jäsentää dumpin kunnolla — se ymmärtää lauserajat, moniriviset INSERTit, gravikset ja kommentit — joten se leikkaa aina oikeilta riveiltä. Tarvitsemiesi taulujen poiminta vie neljä vaihetta:
- Vedä
.sql-dumppisi sisään. DumpCleaner striimaa tiedoston, joten 7 Gt:n dumppi avautuu vakiomuistilla sen sijaan, että lataisi koko möykyn. - Lue automaattisesti tunnistettu taululista. Jokainen taulu jäsennetään ulos ja listataan rivimäärineen ja kokoineen — ei tarvitse vierittää miljoonia rivejä löytääkseen mitä siellä on.
- Valitse haluamasi taulut. Rastita
users,ordersjaproducts, tai kirjoita regex- / poissulkukuvio kuten*_logspudottaaksesi kokonaisia ryhmiä kerralla. - Sisällytä viiteavainten vanhemmat ja vie. Halutessasi vedä viitatut ylätaulut automaattisesti mukaan, ja vie sitten puhdas, tuotava tiedosto.
Muutama asia tekee tästä paljon vähemmän näpertelevää kuin shell-työkaluista:
- Poissulkukuviot kuten
*_logstai*_sessionsriisuvat pois audit- ja istuntokohinan poistamatta rastia kymmeniltä tauluilta käsin. - Regex-suodattimet antavat sinun täsmätä etuliitteen, jälkiliitteen tai minkä tahansa kuvion mukaan — säilytä esimerkiksi kaikki, jotka täsmäävät
shop_*-kuvioon. - Reaaliaikainen esikatselu näyttää täsmälleen, mitkä taulut päätyvät tulosteeseen, kun muutat valintaa.
- Arvioitu tulostekoko kertoo, kuinka suuri poiminta on ennen vientiä, joten tiedät sen mahtuvan paikallisesti.
- Viiteavainriippuvuudet voidaan sisällyttää automaattisesti, joten
orders-taulun valinta tuo hiljaausers-taulun mukanaan ja poiminta tuodaan ilman rajoitevirheitä.
Vain tarvitsemasi taulut — ei mitään muuta
DumpCleaner poimii tietyt taulut minkä tahansa kokoisista dumpeista — striimaten, vakiomuistilla, ja viiteavaimet puolestasi ratkaisten. Natiivi macOS- & iPadOS-sovellus, kertaosto.
Lataa App StorestaUsein kysytyt kysymykset
Voinko poimia useita tauluja kerralla?
Kyllä. Rastita niin monta taulua kuin haluat — users, orders ja products yhdessä — ja DumpCleaner kirjoittaa ne kaikki yhteen tiedostoon yhdellä läpiajolla.
Säilyttääkö se viiteavainriippuvuudet?
Halutessasi kyllä. Ota käyttöön sisällytä viiteavainriippuvuudet, ja mikä tahansa valintasi viittaama ylätaulu vedetään mukaan automaattisesti, joten poiminta tuodaan ilman rajoitevirheitä.
Voinko sulkea tauluja pois kuvion mukaan?
Kyllä. Käytä poissulkukuvioita kuten *_logs tai *_sessions, tai säännöllistä lauseketta, pudottaaksesi kokonaisia tauluryhmiä sen sijaan, että poistaisit niiden rastin yksitellen.
Toimiiko se PostgreSQL:n kanssa?
Kyllä. DumpCleaner lukee MySQL-, MariaDB- ja PostgreSQL- (pg_dump) dumppeja ja käsittelee skeeman etuliitteellä varustetut nimet kuten public.users tauluja poimittaessa.
Lopeta taistelu sedin ja grepin kanssa
Vedä, valitse taulusi, vie. DumpCleaner vetää juuri tarvitsemasi taulut — viiteavaimineen — ulos mistä tahansa dumpista.
Lataa App Storesta