Exporta només l'esquema (estructura) d'un abocament SQL

Tens un abocament complet al disc, però només vols l'estructura (CREATE TABLE, índexs, claus foranes) sense les taules de registre de 89 milions de files. O al revés: només les dades, sense sentències CREATE. Aquí tens per què les opcions habituals d'abocament no serveixen per a un fitxer existent i com separar l'estructura de les dades en un clic.

Tres situacions apareixen contínuament:

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:

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:

  1. Arrossega el teu abocament .sql a DumpCleaner (MySQL, MariaDB o PostgreSQL). Analitza el fitxer en flux, així que un abocament de diversos gigabytes es carrega amb memòria constant.
  2. 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.
  3. 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.
  4. 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 Store

Preguntes 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