Tres situacions apareixen contínuament:
- Aixecar un esquema per a staging o CI: vols l'estructura de taules buida perquè els tests s'executin contra columnes, índexs i restriccions reals, però de cap manera vols enviar gigabytes de files de producció a un entorn d'usar i llençar.
- Només dades de sembra: l'esquema ja existeix a la base de dades de destinació i només necessites les files INSERT per omplir-lo, sense sentències CREATE que xocarien amb el que hi ha.
- Desfer-te del soroll: l'abocament està inflat per taules
logs,sessions,audit_trailocacheamb desenes de milions de files que no vols importar mai.
Per què mysqldump --no-data no n'hi ha prou
El consell clàssic és mysqldump --no-data (només estructura) o mysqldump --no-create-info (només dades). Tots dos són opcions d'exportació: canvien el que conté un abocament nou d'una base de dades en execució. No fan res per a un abocament que ja tens al disc com a fitxer .sql.
A la pràctica, el fitxer sovint arriba d'algú altre, o d'una feina de còpia de seguretat, o d'un servidor al qual ja no tens accés en directe. No pots tornar a executar mysqldump contra una base de dades que no és accessible: les credencials han desaparegut, el servidor està donat de baixa o el fitxer és simplement tot el que t'han donat. En aquell punt les opcions són inútils i et queda editar el fitxer mateix.
La manera manual
El moviment obvi és treure línies amb grep o sed. Per mantenir l'estructura i eliminar les dades:
# manté tot excepte les files INSERT grep -v '^INSERT INTO' dump.sql > schema.sql # o manté només les files INSERT per a un fitxer només de dades grep '^INSERT INTO' dump.sql > data.sql
Això sembla correcte en un abocament petit i endreçat, i després es trenca en un de real:
- INSERT multilínia. Un sol
INSERT INTO … VALUESpot abastar milers de línies.grepcoincideix amb la primera línia i deixa la resta dels valors orfes, produint un fitxer trencat. - Inserts estesos. mysqldump agrupa moltes files en una sola sentència gegant. Els filtres basats en línies no poden saber on acaba aquesta sentència.
- Comentaris i blocs. Els blocs condicionals
/*! … */,LOCK TABLESi els comentaris--s'intercalen amb les dades, així que un filtre ingenu o bé manté brossa o talla alguna cosa que la importació necessita. - Només dades és pitjor. Un pur
grep '^INSERT'descarta les sentènciesSETiLOCKde què depenen les files, i qualsevol INSERT que no comenci exactament a la columna zero desapareix silenciosament.
Acabes depurant el teu propi filtre en lloc d'obtenir el teu esquema.
Només estructura o només dades amb DumpCleaner
DumpCleaner entén les sentències SQL en lloc de fer coincidir línies, així que separa l'estructura de les dades de manera fiable, en fitxers de qualsevol mida:
- Arrossega el teu abocament
.sqla DumpCleaner (MySQL, MariaDB o PostgreSQL). Analitza el fitxer en flux, així que un abocament de diversos gigabytes es carrega amb memòria constant. - Commuta els tipus de sentència que vols: CREATE TABLE, CREATE INDEX, INSERT INTO, ALTER, DROP, LOCK, SET. Desmarca INSERT INTO i obtens només estructura; desmarca CREATE TABLE / CREATE INDEX i obtens només dades.
- O tria un predefinit (Només estructura o Només dades) per establir tots els commutadors en un pas, i després refina per taula si vols.
- Exporta. Obtens un fitxer d'esquema lleuger per a staging o CI, o un abocament net només de dades per a la sembra.
Com que el filtre és conscient de les sentències, un INSERT estès multilínia es manté o s'elimina sencer, mai no es talla pel mig.
El veritable poder és que el filtratge funciona per tipus de sentència i per taula, i tots dos es combinen. Pots mantenir l'estructura de totes les taules però incloure dades INSERT només per a les tres taules que realment necessites, deixant la taula logs de 89 milions de files com una closca buida. Això és una cosa que cap opció --no-data pot expressar.
Separa l'estructura de les dades en segons
DumpCleaner filtra un abocament existent per tipus de sentència i per taula: només estructura, només dades o qualsevol barreja, en flux, amb memòria constant. Aplicació nativa de macOS i iPadOS, compra única.
Baixa-la a l'App StorePreguntes freqüents
Puc exportar les dades sense l'esquema?
Sí. Desactiva CREATE TABLE i CREATE INDEX (o tria el predefinit Només dades) i manté INSERT INTO. DumpCleaner exporta només les files, a punt per carregar-se en un esquema que ja existeix.
Una exportació només d'estructura manté els índexs i les claus foranes?
Sí. Només estructura manté CREATE TABLE, CREATE INDEX, ALTER TABLE i les definicions de clau forana: tot el que defineix la base de dades. Només s'eliminen les files de dades INSERT.
Puc barrejar: estructura per a totes les taules, dades per a algunes?
Sí. El filtratge és per tipus de sentència i per taula, i tots dos es combinen. Manté l'estructura de cada taula però inclou dades INSERT només per a les poques taules que realment necessites.
Això funciona amb PostgreSQL?
Sí. DumpCleaner llegeix abocaments de MySQL, MariaDB i PostgreSQL i detecta el format automàticament, així que les exportacions només d'estructura i només de dades funcionen igual per als fitxers de pg_dump.
Esquema sense les dades, o dades sense l'esquema
Arrossega, commuta els tipus de sentència, exporta. DumpCleaner divideix qualsevol abocament en exactament la part que necessites.
Baixa-la a l'App Store