Kaip ištraukti vieną lentelę iš MySQL išklotinės

Turite 7 GB išklotinę su 127 lentelėmis, bet lokaliai jums reikia tik trijų iš jų — users, orders, products. Štai kodėl įprasti sed/grep triukai lūžta ir kaip keliais paspaudimais ištraukti būtent tas lenteles, kurių norite (su jų išoriniais raktais).

Ne kiekvienam darbui reikia visos duomenų bazės. Kai lokaliai kuriate funkciją, retai norite pilnos produkcinės išklotinės, užimančios diską ir importuojamos valandą. Norite tik tų kelių lentelių, kurias funkcija iš tikrųjų liečia.

Tas pats galioja, kai derinate vieną lentelę — atkartoti duomenų problemai lentelėje orders nereikia kitų 126 lentelių — arba atliekate dalinę migraciją, kai į naują paslaugą perkeliamos vos kelios lentelės. Visais šiais atvejais klausimas tas pats: kaip iš milžiniškos išklotinės švariai ir greitai gauti būtent šias lenteles?

sed/grep būdas ir kodėl jis lūžta

Klasikinis atsakymas — supjaustyti failą su sed tarp skyrių antraščių, kurias mysqldump rašo kiekvienai lentelei:

# ištraukti users lentelę iš mysqldump failo
sed -n '/-- Table structure for table `users`/,/-- Table structure for table/p' dump.sql > users.sql

Atrodo išmoningai ir mažoje, tvarkingoje išklotinėje netgi gali suveikti vieną kartą. Tikrame 7 GB faile jis subyra daugybe subtilių būdų:

Galiausiai krausite awk ant grep ant sed, testuosite su poaibiais ir vis tiek nepasitikėsite rezultatu. Yra geresnis būdas.

Ištraukti lenteles su DumpCleaner

DumpCleaner tinkamai analizuoja išklotinę — jis supranta sakinių ribas, kelių eilučių INSERT sakinius, atbulinius kabliakablius ir komentarus — todėl visada pjauna teisingose eilutėse. Reikalingų lentelių ištraukimas užtrunka keturis žingsnius:

  1. Nutempkite savo .sql išklotinę. DumpCleaner skaito failą srautiniu būdu, todėl 7 GB išklotinė atsiveria su pastoviu atminties naudojimu, o ne įkeliant viską.
  2. Peržiūrėkite automatiškai aptiktą lentelių sąrašą. Kiekviena lentelė išanalizuojama ir išvardijama su savo eilučių skaičiumi ir dydžiu — nereikia slinkti per milijonus eilučių ieškant, kas ten yra.
  3. Pasirinkite norimas lenteles. Pažymėkite users, orders ir products arba įveskite reguliarųjį reiškinį / atmetimo šabloną, pvz. *_logs, kad iškart atmestumėte ištisas grupes.
  4. Įtraukite išorinių raktų pirmines lenteles ir eksportuokite. Norėdami, automatiškai įtraukite nurodytas pirmines lenteles, tada eksportuokite švarų, importuojamą failą.

Kelios savybės daro tai kur kas mažiau varginančiu nei apvalkalo įrankiai:

Tik tos lentelės, kurių jums reikia — nieko daugiau

DumpCleaner ištraukia konkrečias lenteles iš bet kokio dydžio išklotinių — srautiniu būdu, su pastoviu atminties naudojimu ir su už jus išspręstais išoriniais raktais. Vietinė macOS ir iPadOS programa, vienkartinis pirkimas.

Atsisiųsti iš App Store

Dažnai užduodami klausimai

Ar galiu ištraukti kelias lenteles vienu metu?

Taip. Pažymėkite tiek lentelių, kiek norite — users, orders ir products kartu — ir DumpCleaner įrašys jas visas į vieną failą per vieną eigą.

Ar išsaugomos išorinių raktų priklausomybės?

Norėdami, taip. Įjunkite įtraukti išorinių raktų priklausomybes, ir bet kuri jūsų pasirinkimo nurodyta pirminė lentelė bus įtraukta automatiškai, todėl ištrauka importuojasi be apribojimų klaidų.

Ar galiu atmesti lenteles pagal šabloną?

Taip. Naudokite atmetimo šablonus, pvz. *_logs ar *_sessions, arba reguliarųjį reiškinį, kad atmestumėte ištisas lentelių grupes, užuot nuiminėję varneles po vieną.

Ar tai veikia su PostgreSQL?

Taip. DumpCleaner skaito MySQL, MariaDB ir PostgreSQL (pg_dump) išklotines ir ištraukiant lenteles tvarko schema kvalifikuotus pavadinimus, pvz. public.users.

Nustokite kovoti su sed ir grep

Nutempkite, pasirinkite lenteles, eksportuokite. DumpCleaner iš bet kokios išklotinės ištraukia būtent tas lenteles, kurių jums reikia — su jų išoriniais raktais.

Atsisiųsti iš App Store