No tota feina necessita la base de dades sencera. Quan estàs construint una funcionalitat en local, rarament vols un abocament complet de producció omplint-te el disc i trigant una hora a importar-se. Vols el grapat de taules que la funcionalitat realment toca.
El mateix passa quan estàs depurant una sola taula (reproduir un problema de dades a orders no requereix les altres 126 taules) o fent una migració parcial, on només unes quantes taules es mouen a un servei nou. En tots aquests casos la pregunta és la mateixa: com trec just aquestes taules d'un abocament gegant, de manera neta i ràpida?
L'enfocament amb sed/grep i per què es trenca
La resposta clàssica és tallar el fitxer amb sed entre les capçaleres de secció que mysqldump escriu per a cada taula:
# extreu la taula users d'un fitxer mysqldump
sed -n '/-- Table structure for table `users`/,/-- Table structure for table/p' dump.sql > users.sql
Sembla enginyós, i en un abocament petit i endreçat fins i tot podria funcionar un cop. En un fitxer real de 7 GB s'esfondra de moltes maneres subtils:
- INSERT multilínia. Un sol
INSERT INTO ... VALUESpot abastar milers de línies. Les eines orientades a línies comsedigreptallen aquestes files pel mig i produeixen un fitxer que no s'analitzarà. - Cometes invertides i caràcters especials. Els valors de columna contenen
--, punts i coma, cometes invertides, cometes i salts de línia dins de les cadenes. El teu patró coincideix amb text dins de les dades que mai no havia de ser un delimitador. - Noms de taula com a subcadenes. Extreure
usertambé agafauser_roles,user_sessionsipassword_user, perquè el nom apareix com a subcadena d'altres. - Els comentaris i capçaleres varien. El text exacte del comentari varia entre versions de MySQL, MariaDB i PostgreSQL, i
pg_dumpno fa servir les mateixes capçaleres en absolut, així que la mateixa ordre retorna silenciosament res. - Cap consciència de claus foranes. Fins i tot si talles
ordersperfectament, les seves files referencienusers.sedno en té ni idea, així que l'extracció no s'importa a causa d'un error de clau forana.
Acabes apilant awk sobre grep sobre sed, provant amb subconjunts, i encara no et fies del resultat. Hi ha una manera millor.
Extreu taules amb DumpCleaner
DumpCleaner analitza l'abocament correctament (entén els límits de les sentències, els INSERT multilínia, les cometes invertides i els comentaris), així que sempre talla per les línies correctes. Extreure les taules que necessites es fa en quatre passos:
- Arrossega-hi el teu abocament
.sql. DumpCleaner recorre el fitxer en flux, així que un abocament de 7 GB s'obre amb memòria constant en lloc de carregar-ho tot. - Llegeix la llista de taules autodetectada. Cada taula s'analitza i es llista amb el seu recompte de files i la seva mida: sense desplaçar-te per milions de línies per trobar què hi ha.
- Tria les taules que vols. Marca
users,ordersiproducts, o escriu un patró regex / d'exclusió com ara*_logsper eliminar grups sencers de cop. - Inclou els pares de clau forana i exporta. Opcionalment, inclou automàticament les taules pare referenciades i després exporta un fitxer net i importable.
Unes quantes coses fan que això sigui molt menys enutjós que les eines de shell:
- Patrons d'exclusió com
*_logso*_sessionseliminen el soroll d'auditoria i de sessió sense desmarcar dotzenes de taules a mà. - Filtres regex et permeten coincidir per prefix, sufix o qualsevol patró: manté tot el que coincideixi amb
shop_*, per exemple. - Una previsualització en directe mostra exactament quines taules acabaran a la sortida a mesura que canvies la selecció.
- Una mida de sortida estimada t'indica com de gran serà l'extracció abans d'exportar, així saps que et cabrà en local.
- Les dependències de clau forana es poden incloure automàticament, així triar
ordersarrossega discretamentusersi l'extracció s'importa sense errors de restricció.
Només les taules que necessites, res més
DumpCleaner extreu taules específiques d'abocaments de qualsevol mida: en flux, amb memòria constant i amb les claus foranes resoltes per tu. Aplicació nativa de macOS i iPadOS, compra única.
Baixa-la a l'App StorePreguntes freqüents
Puc extreure diverses taules alhora?
Sí. Marca tantes taules com vulguis (users, orders i products juntes) i DumpCleaner les escriu totes en un sol fitxer en una sola passada.
Manté les dependències de clau forana?
Opcionalment, sí. Activa incloure dependències de clau forana i qualsevol taula pare referenciada per la teva selecció s'inclou automàticament, així l'extracció s'importa sense errors de restricció.
Puc excloure taules per patró?
Sí. Fes servir patrons d'exclusió com ara *_logs o *_sessions, o una expressió regular, per eliminar grups sencers de taules en lloc de desmarcar-les una a una.
Funciona amb PostgreSQL?
Sí. DumpCleaner llegeix abocaments de MySQL, MariaDB i PostgreSQL (pg_dump), i gestiona noms qualificats amb esquema com ara public.users en extreure taules.
Deixa de barallar-te amb sed i grep
Arrossega, tria les teves taules, exporta. DumpCleaner extreu exactament les taules que necessites (amb les seves claus foranes) de qualsevol abocament.
Baixa-la a l'App Store