Nem minden feladathoz kell a teljes adatbázis. Amikor helyben fejlesztesz egy funkciót, ritkán akarsz egy teljes éles dumpot, ami megtölti a lemezedet, és egy órát vesz igénybe az importálása. Csak arra a néhány táblára van szükséged, amelyet a funkció valójában érint.
Ugyanez igaz, amikor egyetlen táblát hibakeresel – egy adatprobléma reprodukálásához az orders táblában nincs szükséged a másik 126 táblára –, vagy amikor részleges migrációt végzel, ahol csak néhány tábla költözik egy új szolgáltatásba. Mindezekben az esetekben ugyanaz a kérdés: hogyan nyerem ki éppen ezeket a táblákat egy óriási dumpból, tisztán és gyorsan?
A sed/grep megközelítés, és miért törik el
A klasszikus válasz az, hogy a fájlt sed-del vágjuk fel a szakaszfejlécek között, amiket a mysqldump minden táblához kiír:
# húzd ki a users táblát egy mysqldump fájlból
sed -n '/-- Table structure for table `users`/,/-- Table structure for table/p' dump.sql > users.sql
Okosnak tűnik, és egy kicsi, rendezett dumpon talán egyszer még működik is. Egy valódi 7 GB-os fájlon viszont sokféle apró módon szétesik:
- Többsoros INSERT-ek. Egyetlen
INSERT INTO ... VALUEStöbb ezer sort is átívelhet. A soralapú eszközök, mint asedés agrep, félbevágják ezeket a sorokat, és olyan fájlt állítanak elő, ami nem elemezhető. - Backtickek és speciális karakterek. Az oszlopértékek tartalmaznak
--jeleket, pontosvesszőket, backtickeket, idézőjeleket és sortöréseket a szövegeken belül. A mintád olyan szöveget illeszt az adatokon belül, amit soha nem szántak elválasztónak. - Táblanevek részsztringként. A
userkinyerése magával rántja auser_roles,user_sessionséspassword_usertáblákat is, mert a név mások részsztringjeként jelenik meg. - A kommentek és fejlécek eltolódnak. A pontos kommentszöveg eltér a MySQL, MariaDB és PostgreSQL verziók között, a
pg_dumppedig egyáltalán nem ugyanazokat a fejléceket használja – így ugyanaz a parancs csendben semmit sem ad vissza. - Nincs idegenkulcs-tudat. Még ha tökéletesen ki is vágod az
orderstáblát, a sorai auserstáblára hivatkoznak. Asedezt nem tudja, így a kinyert fájl idegenkulcs-hibával nem importálódik.
A végén awk-ot halmozol grep-re, azt meg sed-re, részhalmazokon tesztelsz, és még mindig nem bízol az eredményben. Van jobb út.
Táblák kinyerése a DumpCleanerrel
A DumpCleaner rendesen elemzi a dumpot – érti az utasításhatárokat, a többsoros INSERT-eket, a backtickeket és a kommenteket –, így mindig a megfelelő sorokon vág. A kívánt táblák kinyerése négy lépésből áll:
- Húzd be a
.sqldumpodat. A DumpCleaner streameli a fájlt, így egy 7 GB-os dump állandó memóriával nyílik meg ahelyett, hogy az egészet betöltené. - Olvasd le az automatikusan felismert táblalistát. Minden tábla ki van elemezve és fel van sorolva a sorszámával és méretével együtt – nem kell milliónyi soron átgörgetni, hogy megtaláld, mi van benne.
- Válaszd ki a kívánt táblákat. Pipáld be a
users,ordersésproductstáblákat, vagy írj be egy regexet / kizáró mintát, például*_logs, hogy egész csoportokat dobj el egy mozdulattal. - Vond be az idegenkulcs-szülőket, és exportálj. Opcionálisan automatikusan behúzhatod a hivatkozott szülőtáblákat, majd exportálj egy tiszta, importálható fájlt.
Néhány dolog ezt sokkal kevésbé babramunkássá teszi, mint a shell-eszközöket:
- A kizáró minták, mint a
*_logsvagy*_sessions, kiszűrik az audit- és session-zajt anélkül, hogy tucatnyi tábláról kézzel kellene levenned a pipát. - A regex-szűrők lehetővé teszik az illesztést előtag, utótag vagy bármilyen minta szerint – tarts meg például mindent, ami illik a
shop_*mintára. - Egy élő előnézet pontosan megmutatja, mely táblák kerülnek a kimenetbe, ahogy változtatod a kiválasztást.
- Egy becsült kimeneti méret megmondja, mekkora lesz a kinyert fájl, mielőtt exportálnál, így tudod, hogy elfér-e helyben.
- Az idegenkulcs-függőségek automatikusan bevonhatók, így az
orderskiválasztása csendben magával hozza auserstáblát, és a kinyert fájl megszorítási hibák nélkül importálódik.
Csak a kívánt táblák – semmi más
A DumpCleaner konkrét táblákat nyer ki bármekkora dumpból – streamelve, állandó memóriával, és az idegenkulcsokat is feloldva neked. Natív macOS & iPadOS alkalmazás, egyszeri vásárlás.
Letöltés az App Store-bólGyakran ismételt kérdések
Kinyerhetek egyszerre több táblát?
Igen. Pipálj be annyi táblát, amennyit csak akarsz – users, orders és products együtt –, és a DumpCleaner mindet egyetlen fájlba írja egy menetben.
Megtartja az idegenkulcs-függőségeket?
Opcionálisan igen. Kapcsold be az idegenkulcs-függőségek bevonása opciót, és a kiválasztásod által hivatkozott bármely szülőtábla automatikusan behúzódik, így a kinyert fájl megszorítási hibák nélkül importálódik.
Kizárhatok táblákat minta szerint?
Igen. Használj kizáró mintákat, mint a *_logs vagy *_sessions, vagy egy reguláris kifejezést, hogy egész táblacsoportokat dobj el ahelyett, hogy egyesével vennéd le róluk a pipát.
Működik PostgreSQL-lel?
Igen. A DumpCleaner olvassa a MySQL, MariaDB és PostgreSQL (pg_dump) dumpokat, és kezeli a sémával minősített neveket, mint a public.users, a táblák kinyerésekor.
Ne harcolj tovább a seddel és a greppel
Húzd be, válaszd ki a tábláidat, exportálj. A DumpCleaner pontosan a kívánt táblákat húzza ki – idegenkulcsaikkal együtt – bármely dumpból.
Letöltés az App Store-ból