Három helyzet folyton felbukkan:
- Séma felhúzása stagingre vagy CI-hez – az üres táblastruktúrára van szükséged, hogy a tesztek valódi oszlopokkal, indexekkel és megszorításokkal fussanak, de semmiképp sem akarsz gigabájtnyi éles sort betuszkolni egy eldobható környezetbe.
- Csak seed-adat – a séma már létezik a cél-adatbázisban, és csak az INSERT sorokra van szükséged a feltöltéséhez, olyan CREATE utasítások nélkül, amelyek ütköznének a meglévővel.
- A zaj eltüntetése – a dumpot felduzzasztják a
logs,sessions,audit_trailvagycachetáblák több tízmillió sorral, amelyeket soha nem akarsz importálni.
Miért nem elég a mysqldump --no-data
A klasszikus tanács a mysqldump --no-data (csak struktúra) vagy a mysqldump --no-create-info (csak adat). Mindkettő export-kapcsoló: azt változtatják meg, hogy egy friss dump egy futó adatbázisból mit tartalmaz. Nem tesznek semmit egy dumppal, ami már a lemezeden ül egy .sql fájlként.
A gyakorlatban a fájl gyakran valaki mástól érkezik, vagy egy mentési feladatból, vagy egy szerverről, amelyhez már nincs élő hozzáférésed. Nem futtathatod újra a mysqldump-ot egy olyan adatbázison, amely nem elérhető – a hitelesítő adatok elvesztek, a szervert leszerelték, vagy a fájl egyszerűen minden, amit kaptál. Ezen a ponton a kapcsolók hasztalanok, és marad, hogy magát a fájlt szerkeszted.
A kézi út
A kézenfekvő lépés az, hogy sorokat szűrsz le grep-pel vagy sed-del. A struktúra megtartásához és az adat eldobásához:
# tarts meg mindent az INSERT sorok kivételével grep -v '^INSERT INTO' dump.sql > schema.sql # vagy tartsd meg csak az INSERT sorokat egy csak-adat fájlhoz grep '^INSERT INTO' dump.sql > data.sql
Ez rendben néz ki egy kicsi, rendezett dumpon – aztán eltörik egy valódin:
- Többsoros INSERT-ek. Egyetlen
INSERT INTO … VALUEStöbb ezer sort is átívelhet. Agrepaz első sorra illeszkedik, és a többi értéket árván hagyja, így törött fájlt állít elő. - Kiterjesztett insertek. A mysqldump sok sort egyetlen óriási utasításba kötegel. A soralapú szűrők nem tudják megmondani, hol ér véget egy ilyen utasítás.
- Kommentek és blokkok. A feltételes
/*! … */blokkok, aLOCK TABLESés a--kommentek az adat közé ékelődnek, így egy naiv szűrő vagy szemetet tart meg, vagy kivág valamit, amire az importnak szüksége van. - A csak-adat még rosszabb. Egy tiszta
grep '^INSERT'eldobja aSETésLOCKutasításokat, amelyektől a sorok függenek, és minden olyan INSERT, ami nem pontosan a nulladik oszlopnál kezdődik, csendben eltűnik.
A végén a saját szűrődet hibakeresed ahelyett, hogy megkapnád a sémádat.
Csak struktúra vagy csak adat a DumpCleanerrel
A DumpCleaner SQL utasításokat ért, nem sorokat illeszt, így megbízhatóan választja le a struktúrát az adatról – bármekkora fájlon:
- Húzd a
.sqldumpodat a DumpCleanerbe (MySQL, MariaDB vagy PostgreSQL). A fájlt streamelve elemzi, így egy több gigabájtos dump állandó memóriával töltődik be. - Kapcsold be a kívánt utasítástípusokat: CREATE TABLE, CREATE INDEX, INSERT INTO, ALTER, DROP, LOCK, SET. Vedd ki az INSERT INTO pipáját, és csak a struktúrát kapod; vedd ki a CREATE TABLE / CREATE INDEX pipáját, és csak az adatot kapod.
- Vagy válassz egy előbeállítást – Csak struktúra vagy Csak adat –, hogy minden kapcsolót egy lépésben állíts be, majd finomíts táblánként, ha akarsz.
- Exportálj. Kapsz egy karcsú sémafájlt staginghez vagy CI-hez, vagy egy tiszta, csak-adat dumpot a feltöltéshez.
Mivel a szűrő utasítás-tudatos, egy többsoros kiterjesztett INSERT egészben marad meg vagy esik ki – soha nem vágódik ketté középen.
Az igazi erő abban rejlik, hogy a szűrés utasítástípusonként és táblánként működik, és a kettő kombinálható. Megtarthatod minden tábla struktúráját, de INSERT-adatot csak arra a három táblára vonatkozóan vonhatsz be, amelyre valóban szükséged van – a 89 millió soros logs táblát üres burokként hagyva. Ilyet egyetlen --no-data kapcsoló sem tud kifejezni.
Válaszd le a struktúrát az adatról másodpercek alatt
A DumpCleaner egy meglévő dumpot utasítástípus és tábla szerint szűr – csak struktúra, csak adat, vagy bármilyen keverék – streamelve, állandó memóriával. Natív macOS & iPadOS alkalmazás, egyszeri vásárlás.
Letöltés az App Store-bólGyakran ismételt kérdések
Exportálhatom az adatot a séma nélkül?
Igen. Kapcsold ki a CREATE TABLE és CREATE INDEX utasításokat (vagy válaszd a Csak adat előbeállítást), és tartsd meg az INSERT INTO-t. A DumpCleaner csak a sorokat exportálja, készen egy már létező sémába való betöltésre.
Egy csak-struktúra export megtartja az indexeket és az idegenkulcsokat?
Igen. A csak struktúra megtartja a CREATE TABLE, CREATE INDEX, ALTER TABLE utasításokat és az idegenkulcs-definíciókat – mindent, ami meghatározza az adatbázist. Csak az INSERT adatsorok kerülnek eltávolításra.
Keverhetek – struktúra minden táblához, adat néhányhoz?
Igen. A szűrés utasítástípusonként és táblánként történik, és a kettő kombinálható. Tartsd meg minden tábla struktúráját, de INSERT-adatot csak arra a néhány táblára vonj be, amelyre valóban szükséged van.
Működik ez PostgreSQL-lel?
Igen. A DumpCleaner olvassa a MySQL, MariaDB és PostgreSQL dumpokat, és automatikusan felismeri a formátumot, így a csak-struktúra és csak-adat exportok ugyanúgy működnek a pg_dump fájlokra is.
Séma az adat nélkül – vagy adat a séma nélkül
Húzd be, kapcsold be az utasítástípusokat, exportálj. A DumpCleaner bármely dumpot pontosan arra a részre bont, amelyre szükséged van.
Letöltés az App Store-ból