Export iba schémy (štruktúry) z SQL dumpu

Na disku máte plný dump, ale chcete len štruktúru — CREATE TABLE, indexy, cudzie kľúče — bez log tabuliek s 89 miliónmi riadkov. Alebo naopak: len dáta, žiadne príkazy CREATE. Tu je dôvod, prečo bežné parametre dumpu nepomôžu existujúcemu súboru, a ako oddeliť štruktúru od dát jedným kliknutím.

Stále sa objavujú tri situácie:

Prečo mysqldump --no-data nestačí

Klasická rada je mysqldump --no-data (len štruktúra) alebo mysqldump --no-create-info (len dáta). Oba sú exportné parametre: menia to, čo obsahuje čerstvý dump z bežiacej databázy. Pre dump, ktorý už máte na disku ako súbor .sql, neurobia nič.

V praxi súbor často prichádza od niekoho iného, zo zálohovacej úlohy alebo zo servera, ku ktorému už nemáte živý prístup. Nemôžete znova spustiť mysqldump proti databáze, ktorá nie je dostupná — prihlasovacie údaje sú preč, server je vyradený z prevádzky, alebo je súbor jednoducho všetko, čo vám odovzdali. V tom momente sú parametre zbytočné a zostane vám úprava samotného súboru.

Ručný spôsob

Zrejmým krokom je odstrániť riadky pomocou grep alebo sed. Na zachovanie štruktúry a zahodenie dát:

# ponechať všetko okrem riadkov INSERT
grep -v '^INSERT INTO' dump.sql > schema.sql

# alebo ponechať len riadky INSERT pre súbor iba s dátami
grep '^INSERT INTO' dump.sql > data.sql

Na malom, upratanom dumpe to vyzerá v poriadku — a potom sa na skutočnom pokazí:

Skončíte tak, že ladíte svoj vlastný filter namiesto toho, aby ste získali schému.

Iba štruktúra alebo iba dáta s DumpCleaner

DumpCleaner rozumie SQL príkazom namiesto zhody riadkov, takže spoľahlivo oddelí štruktúru od dát — na súboroch akejkoľvek veľkosti:

  1. Pretiahnite svoj .sql dump do DumpCleaner (MySQL, MariaDB alebo PostgreSQL). Parsuje súbor prúdovo, takže viacgigabajtový dump sa načíta s konštantnou pamäťou.
  2. Prepnite typy príkazov, ktoré chcete: CREATE TABLE, CREATE INDEX, INSERT INTO, ALTER, DROP, LOCK, SET. Odškrtnite INSERT INTO a dostanete len štruktúru; odškrtnite CREATE TABLE / CREATE INDEX a dostanete len dáta.
  3. Alebo vyberte predvoľbu — Iba štruktúra alebo Iba dáta — na nastavenie všetkých prepínačov v jednom kroku a potom podľa potreby doladiť pre jednotlivé tabuľky.
  4. Exportujte. Dostanete štíhly súbor schémy pre staging či CI, alebo čistý dump iba s dátami na seedovanie.

Keďže filter zohľadňuje príkazy, viacriadkový rozšírený INSERT sa ponechá alebo zahodí ako celok — nikdy sa nereže uprostred.

Skutočná sila je v tom, že filtrovanie funguje na typ príkazu aj na tabuľku, a oba sa kombinujú. Môžete ponechať štruktúru každej tabuľky, ale zahrnúť dáta INSERT len pre tri tabuľky, ktoré naozaj potrebujete — a nechať tabuľku logs s 89 miliónmi riadkov ako prázdnu škrupinu. To je niečo, čo žiadny parameter --no-data nedokáže vyjadriť.

Oddeľte štruktúru od dát za pár sekúnd

DumpCleaner filtruje existujúci dump podľa typu príkazu a podľa tabuľky — iba štruktúra, iba dáta alebo akákoľvek kombinácia — prúdovo, s konštantnou pamäťou. Natívna aplikácia pre macOS a iPadOS, jednorazová kúpa.

Stiahnuť v App Store

Často kladené otázky

Môžem exportovať dáta bez schémy?

Áno. Vypnite CREATE TABLE a CREATE INDEX (alebo vyberte predvoľbu Iba dáta) a ponechajte INSERT INTO. DumpCleaner exportuje len riadky pripravené na načítanie do už existujúcej schémy.

Zachováva export iba štruktúry indexy a cudzie kľúče?

Áno. Iba štruktúra zachováva CREATE TABLE, CREATE INDEX, ALTER TABLE a definície cudzích kľúčov — všetko, čo definuje databázu. Odstránia sa len dátové riadky INSERT.

Môžem to zmiešať — štruktúru pre všetky tabuľky, dáta pre niektoré?

Áno. Filtrovanie je na typ príkazu a na tabuľku a oba sa kombinujú. Ponechajte štruktúru každej tabuľky, ale zahrňte dáta INSERT len pre tých pár tabuliek, ktoré naozaj potrebujete.

Funguje to s PostgreSQL?

Áno. DumpCleaner číta dumpy MySQL, MariaDB a PostgreSQL a formát deteguje automaticky, takže exporty iba štruktúry a iba dát fungujú rovnako aj pre súbory pg_dump.

Schéma bez dát — alebo dáta bez schémy

Pretiahnite, prepnite typy príkazov, exportujte. DumpCleaner rozdelí akýkoľvek dump presne na tú časť, ktorú potrebujete.

Stiahnuť v App Store