Kolm olukorda tulevad pidevalt ette:
- Skeemi püstitamine testkeskkonna või CI jaoks — soovid tühja tabelistruktuuri, et testid saaksid joosta reaalsete veergude, indeksite ja piirangute vastu, kuid sa absoluutselt ei taha saata gigabaite tootmisridu ühekordsesse keskkonda.
- Ainult algandmed — skeem on juba sihtandmebaasis olemas ja sul on vaja lihtsalt INSERT-ridu selle täitmiseks, ilma CREATE-lauseteta, mis põrkuksid sellega, mis seal on.
- Vabane mürast — tõmmist paisutavad
logs,sessions,audit_trailvõicachetabelid kümnete miljonite ridadega, mida sa ei taha kunagi importida.
Miks mysqldump --no-data ei ole piisav
Klassikaline nõuanne on mysqldump --no-data (ainult struktuur) või mysqldump --no-create-info (ainult andmed). Mõlemad on ekspordilipud: need muudavad, mida värske tõmmis töötavast andmebaasist sisaldab. Need ei tee midagi tõmmise jaoks, mis on sul juba .sql-failina kettal olemas.
Praktikas saabub fail sageli kelleltki teiselt või varundustööst või serverist, millele sul enam otseligipääsu pole. Sa ei saa mysqldump-i uuesti käivitada andmebaasi vastu, mis pole kättesaadav — mandaadid on kadunud, server on kasutuselt kõrvaldatud või fail on lihtsalt kõik, mis sulle anti. Sel hetkel on lipud kasutud ja sa oled jäetud faili ennast redigeerima.
Käsitsi viis
Ilmne samm on ridade eemaldamine grep-i või sed-iga. Struktuuri hoidmiseks ja andmete kõrvaldamiseks:
# hoia kõike peale INSERT-ridade grep -v '^INSERT INTO' dump.sql > schema.sql # või hoia ainult INSERT-read ainult-andmete faili jaoks grep '^INSERT INTO' dump.sql > data.sql
See tundub korras väikese, korraliku tõmmise peal — ja siis katkeb tõelise peal:
- Mitmerealised INSERT-id. Üksainus
INSERT INTO … VALUESvõib ulatuda tuhandete ridade üle.grepsobitab esimese rea ja jätab ülejäänud väärtused orvuks, tootes katkise faili. - Laiendatud lisamised. mysqldump pakib palju ridu ühte hiiglaslikku lausesse. Reapõhised filtrid ei suuda öelda, kus selline lause lõpeb.
- Kommentaarid ja plokid. Tinglikud
/*! … */plokid,LOCK TABLESja--kommentaarid põimuvad andmetega, seega naiivne filter kas hoiab prügi või lõikab midagi, mida import vajab. - Ainult-andmed on hullem. Puhas
grep '^INSERT'viskab minemaSET- jaLOCK-laused, millest read sõltuvad, ja iga INSERT, mis ei alga täpselt veerult null, kaob vaikselt.
Lõpuks silud oma filtrit, selle asemel et saada oma skeem kätte.
Ainult struktuur või ainult andmed DumpCleaneriga
DumpCleaner mõistab SQL-lauseid, selle asemel et sobitada ridu, seega lahutab see struktuuri andmetest usaldusväärselt — mis tahes suurusega failides:
- Lohista oma
.sql-tõmmis DumpCleanerisse (MySQL, MariaDB või PostgreSQL). See parsib faili voogedastades, seega mitmegigabaidine tõmmis laaditakse konstantse mäluga. - Lülita sisse/välja lausetüübid, mida soovid: CREATE TABLE, CREATE INDEX, INSERT INTO, ALTER, DROP, LOCK, SET. Võta märge maha INSERT INTO-lt ja saad ainult struktuuri; võta märge maha CREATE TABLE / CREATE INDEX-lt ja saad ainult andmed.
- Või vali eelseadistus — Ainult struktuur või Ainult andmed — et seada kõik lülitid ühe sammuga, seejärel täpsusta soovi korral tabelite kaupa.
- Ekspordi. Saad lahja skeemifaili testkeskkonna või CI jaoks või puhta ainult-andmete tõmmise algandmete jaoks.
Kuna filter on lauseteadlik, hoitakse või kõrvaldatakse mitmerealine laiendatud INSERT tervikuna — seda ei lõigata kunagi keskelt läbi.
Tegelik võimsus seisneb selles, et filtreerimine töötab lausetüübi kaupa ja tabeli kaupa, ning need kaks kombineeruvad. Sa saad hoida iga tabeli struktuuri, kuid kaasata INSERT-andmed ainult kolme tabeli jaoks, mida tegelikult vajad — jättes 89 miljoni realise logs-tabeli tühjaks kojaks. See on midagi, mida ükski --no-data lipp ei suuda väljendada.
Lahuta struktuur andmetest sekunditega
DumpCleaner filtreerib olemasolevat tõmmist lausetüübi ja tabeli kaupa — ainult struktuur, ainult andmed või mis tahes segu — voogedastades, konstantse mäluga. Natiivne macOS-i ja iPadOS-i rakendus, ühekordne ost.
Laadi alla App Store'istKorduma kippuvad küsimused
Kas ma saan eksportida andmed ilma skeemita?
Jah. Keela CREATE TABLE ja CREATE INDEX (või vali eelseadistus Ainult andmed) ja hoia INSERT INTO. DumpCleaner ekspordib ainult read, valmis laadimiseks juba olemasolevasse skeemi.
Kas ainult-struktuuri eksport säilitab indeksid ja välisvõtmed?
Jah. Ainult struktuur hoiab CREATE TABLE, CREATE INDEX, ALTER TABLE ja välisvõtmete definitsioonid — kõik, mis andmebaasi määratleb. Eemaldatakse ainult INSERT-andmeread.
Kas ma saan segada — struktuur kõigi tabelite jaoks, andmed mõne jaoks?
Jah. Filtreerimine on lausetüübi ja tabeli kaupa ning mõlemad kombineeruvad. Hoia iga tabeli struktuuri, kuid kaasa INSERT-andmed ainult nende üksikute tabelite jaoks, mida tegelikult vajad.
Kas see toimib PostgreSQL-iga?
Jah. DumpCleaner loeb MySQL-i, MariaDB ja PostgreSQL-i tõmmiseid ning tuvastab formaadi automaatselt, seega ainult-struktuuri ja ainult-andmete eksport toimivad pg_dump-failide puhul samamoodi.
Skeem ilma andmeteta — või andmed ilma skeemita
Lohista, lülita lausetüübid sisse-välja, ekspordi. DumpCleaner lahutab mis tahes tõmmise täpselt selleks osaks, mida vajad.
Laadi alla App Store'ist