Tri se situacije stalno ponavljaju:
- Postavite shemu za staging ili CI — želite praznu strukturu tablica kako bi testovi mogli raditi nad stvarnim stupcima, indeksima i ograničenjima, ali nikako ne želite gurnuti gigabajte produkcijskih redaka u jednokratno okruženje.
- Samo seed podaci — shema već postoji u ciljnoj bazi podataka, a treba vam samo INSERT reci da je popunite, bez CREATE naredbi koje bi se sudarile s onim što je već tamo.
- Riješite se šuma — dump je napuhan tablicama
logs,sessions,audit_traililicaches desecima milijuna redaka koje nikad ne želite uvesti.
Zašto mysqldump --no-data nije dovoljan
Klasičan savjet je mysqldump --no-data (samo struktura) ili mysqldump --no-create-info (samo podaci). Oboje su zastavice izvoza: mijenjaju što novi dump iz pokrenute baze podataka sadrži. Ne čine ništa za dump koji već imate na disku kao .sql datoteku.
U praksi datoteka često stiže od nekog drugog, ili iz posla sigurnosne kopije, ili sa servera kojem više nemate živi pristup. Ne možete ponovno pokrenuti mysqldump nad bazom podataka koja nije dostupna — vjerodajnice su nestale, server je isključen iz upotrebe, ili je datoteka jednostavno sve što ste dobili. U tom trenutku zastavice su beskorisne, a ostaje vam uređivanje same datoteke.
Ručni način
Očit potez je ukloniti retke pomoću grep-a ili sed-a. Da zadržite strukturu i odbacite podatke:
# zadrži sve osim INSERT redaka grep -v '^INSERT INTO' dump.sql > schema.sql # ili zadrži samo INSERT retke za datoteku samo s podacima grep '^INSERT INTO' dump.sql > data.sql
Ovo izgleda dobro na malom, urednom dumpu — a onda puca na stvarnom:
- Višeredni INSERT-ovi. Jedan
INSERT INTO … VALUESmože se protezati kroz tisuće redaka.greppodudara prvi redak i ostavlja ostatak vrijednosti osirotjelim, proizvodeći pokvarenu datoteku. - Prošireni inserti. mysqldump grupira mnogo redaka u jednu golemu naredbu. Filtri temeljeni na retcima ne mogu prepoznati gdje takva naredba završava.
- Komentari i blokovi. Uvjetni
/*! … */blokovi,LOCK TABLESi--komentari isprepliću se s podacima, pa naivan filtar ili zadržava smeće ili izrezuje nešto što je uvozu potrebno. - Samo podaci je gore. Čisti
grep '^INSERT'odbacujeSETiLOCKnaredbe o kojima reci ovise, a svaki INSERT koji ne počinje točno na stupcu nula tiho nestaje.
Na kraju otklanjate greške u vlastitom filtru umjesto da dobijete svoju shemu.
Samo struktura ili samo podaci s DumpCleanerom
DumpCleaner razumije SQL naredbe umjesto podudaranja redaka, pa pouzdano odvaja strukturu od podataka — na datotekama bilo koje veličine:
- Povucite svoj
.sqldump u DumpCleaner (MySQL, MariaDB ili PostgreSQL). Parsira datoteku protočno, pa se dump od više gigabajta učitava uz konstantnu memoriju. - Uključite vrste naredbi koje želite: CREATE TABLE, CREATE INDEX, INSERT INTO, ALTER, DROP, LOCK, SET. Odznačite INSERT INTO i dobivate samo strukturu; odznačite CREATE TABLE / CREATE INDEX i dobivate samo podatke.
- Ili odaberite unaprijed zadanu postavku — Samo struktura ili Samo podaci — da postavite svaku prekidač u jednom koraku, zatim po želji doradite po tablici.
- Izvezite. Dobivate vitku datoteku sheme za staging ili CI, ili čist dump samo s podacima za seed.
Budući da je filtar svjestan naredbi, višeredni prošireni INSERT zadržava se ili odbacuje kao cjelina — nikad ne prerezan po sredini.
Prava snaga je u tome što filtriranje radi po vrsti naredbe i po tablici, i to se dvoje kombinira. Možete zadržati strukturu svake tablice, ali uključiti INSERT podatke samo za tri tablice koje zaista trebate — ostavljajući tablicu logs s 89 milijuna redaka kao praznu ljušturu. To je nešto što nijedna --no-data zastavica ne može izraziti.
Odvojite strukturu od podataka u sekundama
DumpCleaner filtrira postojeći dump prema vrsti naredbe i prema tablici — samo struktura, samo podaci ili bilo koja mješavina — protočno, uz konstantnu memoriju. Nativna macOS i iPadOS aplikacija, jednokratna kupnja.
Preuzmi na App StoreuČesto postavljana pitanja
Mogu li izvesti podatke bez sheme?
Da. Onemogućite CREATE TABLE i CREATE INDEX (ili odaberite postavku Samo podaci) i zadržite INSERT INTO. DumpCleaner izvozi samo retke, spremne za učitavanje u shemu koja već postoji.
Zadržava li izvoz samo strukture indekse i vanjske ključeve?
Da. Samo struktura zadržava CREATE TABLE, CREATE INDEX, ALTER TABLE i definicije vanjskih ključeva — sve što definira bazu podataka. Uklanjaju se samo INSERT reci s podacima.
Mogu li miješati — strukturu za sve tablice, podatke za neke?
Da. Filtriranje je po vrsti naredbe i po tablici, i oboje se kombinira. Zadržite strukturu svake tablice, ali uključite INSERT podatke samo za nekoliko tablica koje zaista trebate.
Radi li ovo s PostgreSQL-om?
Da. DumpCleaner čita MySQL, MariaDB i PostgreSQL dumpove i automatski otkriva format, pa izvozi samo strukture i samo podataka rade jednako za pg_dump datoteke.
Shema bez podataka — ili podaci bez sheme
Povucite, uključite vrste naredbi, izvezite. DumpCleaner dijeli bilo koji dump na točno onaj dio koji trebate.
Preuzmi na App Storeu