Izvilkt vienu tabulu no MySQL izgāztuves

Tev ir 7 GB izgāztuve ar 127 tabulām, bet lokāli tev vajag tikai trīs no tām — users, orders, products. Lūk, kāpēc ierastie sed/grep triki salūst un kā izvilkt tieši tās tabulas, kuras vēlies (ar to ārējām atslēgām), dažos klikšķos.

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:

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:

  1. Ievelc savu .sql izgāztuvi iekšā. DumpCleaner straumē failu, tāpēc 7 GB izgāztuve atveras ar nemainīgu atmiņu, nevis ielādējot visu.
  2. 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.
  3. Izvēlies vajadzīgās tabulas. Atzīmē users, orders un products, vai ievadi regulāro izteiksmi / izslēgšanas šablonu, piemēram, *_logs, lai izmestu veselas grupas vienā reizē.
  4. 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:

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 Store

Biežā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