Ne katrs uzdevums prasa visu datubāzi. Kad tu lokāli veido funkciju, tu reti vēlies pilnu produkcijas izgāztuvi, kas piepilda tavu disku un aizņem stundu, lai importētu. Tu vēlies to nedaudzo tabulu kopu, ko funkcija patiešām skar.
Tas pats attiecas, kad tu atkļūdo vienu tabulu — datu problēmas reproducēšana orders neprasa pārējās 126 tabulas — vai veic daļēju migrāciju, kur tikai dažas tabulas pāriet uz jaunu servisu. Visos šajos gadījumos jautājums ir tas pats: kā man iegūt tikai šīs tabulas no milzīgas izgāztuves, tīri un ātri?
sed/grep pieeja un kāpēc tā salūst
Klasiskā atbilde ir sagriezt failu ar sed starp sadaļu galvenēm, ko mysqldump raksta katrai tabulai:
# izvelc users tabulu no mysqldump faila
sed -n '/-- Table structure for table `users`/,/-- Table structure for table/p' dump.sql > users.sql
Tas izskatās gudri, un mazā, kārtīgā izgāztuvē tas varbūt pat vienreiz izdodas. Īstā 7 GB failā tas sabrūk daudzos smalkos veidos:
- Daudzrindu INSERT. Viens
INSERT INTO ... VALUESvar aptvert tūkstošiem rindu. Uz rindām orientēti rīki kāsedungrepsagriež šīs rindas uz pusēm un rada failu, kas neparsējas. - Vērupes un speciālie simboli. Kolonnu vērtības satur
--, semikolus, vērupes, pēdiņas un jaunrindas virknēs. Tavs šablons sakrīt ar tekstu datu iekšpusē, kas nekad nebija paredzēts kā atdalītājs. - Tabulu nosaukumi kā apakšvirknes. Izvelkot
user, tiek satverti arīuser_roles,user_sessionsunpassword_user, jo nosaukums parādās kā citu apakšvirkne. - Komentāri un galvenes atšķiras. Precīzais komentāra teksts atšķiras starp MySQL, MariaDB un PostgreSQL versijām, un
pg_dumpvispār neizmanto tās pašas galvenes — tāpēc tā pati komanda klusi neatgriež neko. - Nav ārējo atslēgu apzināšanās. Pat ja tu perfekti izgriez
orders, tā rindas atsaucas uzusers.sedpar to nezina, tāpēc izvilkums neizdodas importēt ar ārējās atslēgas kļūdu.
Tu galu galā kraujot awk uz grep uz sed, testējot uz apakškopām, un joprojām neuzticies rezultātam. Ir labāks veids.
Izvelc tabulas ar DumpCleaner
DumpCleaner parsē izgāztuvi pareizi — tas saprot priekšrakstu robežas, daudzrindu INSERT, vērupes un komentārus — tāpēc tas vienmēr griež uz pareizajām rindām. Vajadzīgo tabulu izvilkšana notiek četros soļos:
- Ievelc savu
.sqlizgāztuvi iekšā. DumpCleaner straumē failu, tāpēc 7 GB izgāztuve atveras ar nemainīgu atmiņu, nevis ielādējot visu. - Izlasi automātiski noteikto tabulu sarakstu. Katra tabula tiek izparsēta un uzskaitīta ar tās rindu skaitu un izmēru — bez ritināšanas cauri miljoniem rindu, lai atrastu, kas tur ir.
- Izvēlies vajadzīgās tabulas. Atzīmē
users,ordersunproducts, vai ievadi regulāro izteiksmi / izslēgšanas šablonu, piemēram,*_logs, lai izmestu veselas grupas vienā reizē. - Iekļauj ārējo atslēgu vecākus un eksportē. Pēc izvēles automātiski ievelc atsauktās vecāku tabulas, tad eksportē tīru, importējamu failu.
Dažas lietas padara to daudz mazāk sarežģītu nekā čaulas rīki:
- Izslēgšanas šabloni kā
*_logsvai*_sessionsizņem audita un sesiju troksni, neatzīmējot desmitiem tabulu ar roku. - Regulāro izteiksmju filtri ļauj sakrist pēc prefiksa, sufiksa vai jebkura šablona — patur visu, kas sakrīt ar
shop_*, piemēram. - Reāllaika priekšskatījums parāda tieši to, kuras tabulas nonāks izvadē, mainot atlasi.
- Aptuvenais izvades izmērs pasaka, cik liels būs izvilkums pirms eksportēšanas, tāpēc tu zini, ka tas ietilps lokāli.
- Ārējo atslēgu atkarības var iekļaut automātiski, tāpēc, izvēloties
orders, klusi paņem līdziusers, un izvilkums importējas bez ierobežojumu kļūdām.
Tikai tās tabulas, kuras tev vajag — nekas cits
DumpCleaner izvelk konkrētas tabulas no jebkura izmēra izgāztuvēm — straumējot, ar nemainīgu atmiņu un ar tev atrisinātām ārējām atslēgām. Vietējā macOS un iPadOS lietotne, vienreizējs pirkums.
Lejupielādēt App StoreBiežāk uzdotie jautājumi
Vai es varu izvilkt vairākas tabulas vienlaikus?
Jā. Atzīmē tik daudz tabulu, cik vēlies — users, orders un products kopā — un DumpCleaner ieraksta tās visas vienā failā vienā piegājienā.
Vai tas saglabā ārējo atslēgu atkarības?
Pēc izvēles, jā. Ieslēdz iekļaut ārējo atslēgu atkarības, un jebkura vecāka tabula, uz kuru atsaucas tava atlase, tiek automātiski ievilkta, tāpēc izvilkums importējas bez ierobežojumu kļūdām.
Vai es varu izslēgt tabulas pēc šablona?
Jā. Izmanto izslēgšanas šablonus, piemēram, *_logs vai *_sessions, vai regulāro izteiksmi, lai izmestu veselas tabulu grupas, nevis atzīmētu tās pa vienai.
Vai tas darbojas ar PostgreSQL?
Jā. DumpCleaner nolasa MySQL, MariaDB un PostgreSQL (pg_dump) izgāztuves un apstrādā shēmas kvalificētus nosaukumus, piemēram, public.users, izvelkot tabulas.
Beidz cīnīties ar sed un grep
Ievelc, izvēlies savas tabulas, eksportē. DumpCleaner izvelk tieši tās tabulas, kuras tev vajag — ar to ārējām atslēgām — no jebkuras izgāztuves.
Lejupielādēt App Store