Ne každá práce potřebuje celou databázi. Když lokálně vyvíjíte funkci, málokdy chcete plný produkční dump, který zaplňuje disk a hodinu se importuje. Chcete tu hrstku tabulek, kterých se funkce skutečně dotýká.
Totéž platí, když ladíte jednu tabulku — reprodukce problému s daty v orders nevyžaduje dalších 126 tabulek — nebo když provádíte částečnou migraci, kdy se do nové služby přesouvá jen několik tabulek. Ve všech těchto případech je otázka stejná: jak dostat jen tyto tabulky z obřího dumpu, čistě a rychle?
Přístup sed/grep a proč selhává
Klasická odpověď je rozříznout soubor pomocí sed mezi hlavičkami sekcí, které mysqldump zapisuje pro každou tabulku:
# vytažení tabulky users z mysqldump souboru
sed -n '/-- Table structure for table `users`/,/-- Table structure for table/p' dump.sql > users.sql
Vypadá to chytře a na malém, úhledném dumpu to možná i jednou zafunguje. Na reálném 7GB souboru se to ale rozpadne mnoha nenápadnými způsoby:
- Víceřádkové INSERTy. Jediný
INSERT INTO ... VALUESse může táhnout přes tisíce řádků. Řádkově orientované nástroje jakosedagreptyto řádky rozseknou vejpůl a vytvoří soubor, který nelze naparsovat. - Zpětné apostrofy a speciální znaky. Hodnoty sloupců obsahují
--, středníky, zpětné apostrofy, uvozovky a nové řádky uvnitř řetězců. Váš vzor se shoduje s textem uvnitř dat, který nikdy neměl být oddělovačem. - Názvy tabulek jako podřetězce. Extrakce
userzachytí iuser_roles,user_sessionsapassword_user, protože se název objevuje jako podřetězec jiných. - Komentáře a hlavičky se liší. Přesné znění komentářů se mění mezi verzemi MySQL, MariaDB a PostgreSQL a
pg_dumpstejné hlavičky nepoužívá vůbec — takže tentýž příkaz tiše nevrátí nic. - Žádné povědomí o cizích klíčích. I když
ordersrozříznete dokonale, její řádky odkazují nausers.sedo tom nemá tušení, takže se extrakt neimportuje kvůli chybě cizího klíče.
Skončíte tak, že vršíte awk na grep na sed, testujete na podmnožinách a stejně výsledku nevěříte. Existuje lepší způsob.
Extrakce tabulek s DumpCleaner
DumpCleaner dump parsuje pořádně — rozumí hranicím příkazů, víceřádkovým INSERTům, zpětným apostrofům i komentářům — takže vždy řeže na správných řádcích. Extrakce potřebných tabulek zabere čtyři kroky:
- Přetáhněte svůj
.sqldump dovnitř. DumpCleaner streamuje soubor, takže se 7GB dump otevře s konstantní pamětí místo načítání celku. - Přečtěte si automaticky rozpoznaný seznam tabulek. Každá tabulka je vyparsována a vypsána s počtem řádků a velikostí — žádné scrollování milionem řádků, abyste zjistili, co tam je.
- Vyberte tabulky, které chcete. Zaškrtněte
users,ordersaproducts, nebo zadejte regulární výraz / vylučovací vzor jako*_logsa zahoďte celé skupiny naráz. - Zahrňte nadřazené tabulky cizích klíčů a exportujte. Volitelně automaticky přiberte odkazované nadřazené tabulky a poté vyexportujte čistý, importovatelný soubor.
Několik věcí činí tento postup mnohem méně otravným než nástroje shellu:
- Vylučovací vzory jako
*_logsnebo*_sessionsodstraní šum z auditů a relací, aniž byste ručně odškrtávali desítky tabulek. - Regex filtry umožňují shodu podle prefixu, sufixu nebo libovolného vzoru — třeba ponechat vše, co odpovídá
shop_*. - Živý náhled ukazuje přesně, které tabulky skončí ve výstupu, jak měníte výběr.
- Odhadovaná velikost výstupu vám před exportem řekne, jak velký extrakt bude, takže víte, že se vám lokálně vejde.
- Závislosti cizích klíčů lze zahrnout automaticky, takže výběr
orderspotichu přibere iusersa extrakt se naimportuje bez chyb omezení.
Jen tabulky, které potřebujete — nic víc
DumpCleaner extrahuje konkrétní tabulky z dumpů libovolné velikosti — streamovaně, s konstantní pamětí a s vyřešenými cizími klíči za vás. Nativní aplikace pro macOS a iPadOS, jednorázový nákup.
Stáhnout z App StoreČasté dotazy
Mohu extrahovat více tabulek najednou?
Ano. Zaškrtněte libovolný počet tabulek — users, orders a products společně — a DumpCleaner je všechny zapíše do jednoho souboru v jednom průchodu.
Zachovává závislosti cizích klíčů?
Volitelně ano. Zapněte zahrnout závislosti cizích klíčů a jakákoli nadřazená tabulka odkazovaná vaším výběrem se automaticky přibere, takže se extrakt naimportuje bez chyb omezení.
Mohu vyloučit tabulky podle vzoru?
Ano. Použijte vylučovací vzory jako *_logs nebo *_sessions, případně regulární výraz, a zahoďte celé skupiny tabulek místo jejich postupného odškrtávání.
Funguje to s PostgreSQL?
Ano. DumpCleaner čte dumpy MySQL, MariaDB a PostgreSQL (pg_dump) a při extrakci tabulek si poradí s názvy kvalifikovanými schématem, jako je public.users.
Přestaňte bojovat se sed a grep
Přetáhnout, vybrat tabulky, exportovat. DumpCleaner vytáhne přesně ty tabulky, které potřebujete — i s jejich cizími klíči — z libovolného dumpu.
Stáhnout z App Store