Kolme tilannetta tulee toistuvasti esiin:
- Pystytä skeema stagingiä tai CI:tä varten — haluat tyhjän taulurakenteen, jotta testit voivat ajaa oikeita sarakkeita, indeksejä ja rajoitteita vasten, mutta et ehdottomasti halua rahdata gigatavuja tuotantorivejä kertakäyttöiseen ympäristöön.
- Vain siemendata — skeema on jo olemassa kohdetietokannassa, ja tarvitset vain INSERT-rivit sen täyttämiseen, ilman CREATE-lauseita jotka törmäisivät siihen mitä siellä jo on.
- Pääse eroon kohinasta — dumppi on paisunut
logs-,sessions-,audit_trail- taicache-tauluista, joissa on kymmeniä miljoonia rivejä joita et koskaan halua tuoda.
Miksi mysqldump --no-data ei riitä
Klassinen neuvo on mysqldump --no-data (vain rakenne) tai mysqldump --no-create-info (vain data). Molemmat ovat vientilippuja: ne muuttavat sitä, mitä tuore dumppi ajossa olevasta tietokannasta sisältää. Ne eivät tee mitään dumpille, joka sinulla jo on levyllä .sql-tiedostona.
Käytännössä tiedosto tulee usein joltain toiselta, tai varmuuskopiointityöstä, tai palvelimelta johon sinulla ei enää ole live-pääsyä. Et voi ajaa mysqldump:ia uudelleen tietokantaa vasten johon ei pääse — tunnukset ovat poissa, palvelin on poistettu käytöstä, tai tiedosto on yksinkertaisesti kaikki mitä sinulle annettiin. Siinä kohtaa liput ovat hyödyttömiä, ja sinun on muokattava itse tiedostoa.
Manuaalinen tapa
Ilmeinen siirto on riisua rivit grep:llä tai sed:llä. Säilyttääksesi rakenteen ja pudottaaksesi datan:
# säilytä kaikki paitsi INSERT-rivit grep -v '^INSERT INTO' dump.sql > schema.sql # tai säilytä vain INSERT-rivit vain dataa sisältävälle tiedostolle grep '^INSERT INTO' dump.sql > data.sql
Tämä näyttää hyvältä pienessä, siistissä dumpissa — ja hajoaa sitten oikeassa:
- Moniriviset INSERTit. Yksi
INSERT INTO … VALUESvoi ulottua tuhansien rivien yli.greptäsmää ensimmäiseen riviin ja jättää loput arvot orvoiksi, tuottaen rikkinäisen tiedoston. - Laajennetut insertit. mysqldump niputtaa monta riviä yhteen jättiläislauseeseen. Riviperustaiset suodattimet eivät osaa kertoa, mihin tällainen lause päättyy.
- Kommentit ja lohkot. Ehdolliset
/*! … */-lohkot,LOCK TABLESja---kommentit lomittuvat datan kanssa, joten naiivi suodatin joko säilyttää roskaa tai leikkaa jotain, mitä tuonti tarvitsee. - Vain data on pahempi. Pelkkä
grep '^INSERT'heittää poisSET- jaLOCK-lauseet, joista rivit riippuvat, ja mikä tahansa INSERT joka ei ala täsmälleen sarakkeesta nolla katoaa hiljaa.
Päädyt debuggaamaan omaa suodatintasi sen sijaan, että saisit skeemasi.
Vain rakenne tai vain data DumpCleanerilla
DumpCleaner ymmärtää SQL-lauseita rivien täsmäämisen sijaan, joten se erottaa rakenteen datasta luotettavasti — minkä tahansa kokoisissa tiedostoissa:
- Vedä
.sql-dumppisi DumpCleaneriin (MySQL, MariaDB tai PostgreSQL). Se jäsentää tiedoston striimaten, joten monen gigatavun dumppi latautuu vakiomuistilla. - Kytke päälle haluamasi lausetyypit: CREATE TABLE, CREATE INDEX, INSERT INTO, ALTER, DROP, LOCK, SET. Poista rasti kohdasta INSERT INTO ja saat vain rakenteen; poista rasti kohdista CREATE TABLE / CREATE INDEX ja saat vain datan.
- Tai valitse esiasetus — Vain rakenne tai Vain data — asettaaksesi jokaisen valinnan yhdellä askeleella, ja hienosäädä sitten taulukohtaisesti halutessasi.
- Vie. Saat kevyen skeematiedoston stagingiin tai CI:hin, tai puhtaan vain dataa sisältävän dumpin siementämistä varten.
Koska suodatin on lausetietoinen, monirivinen laajennettu INSERT säilytetään tai pudotetaan kokonaisuutena — ei koskaan leikata keskeltä.
Todellinen voima on siinä, että suodatus toimii lausetyypeittäin ja tauluittain, ja nämä kaksi yhdistyvät. Voit säilyttää jokaisen taulun rakenteen mutta sisällyttää INSERT-datan vain kolmelle taululle, joita oikeasti tarvitset — jättäen 89 miljoonan rivin logs-taulun tyhjäksi kuoreksi. Sitä ei mikään --no-data-lippu osaa ilmaista.
Erota rakenne datasta sekunneissa
DumpCleaner suodattaa olemassa olevaa dumppia lausetyypeittäin ja tauluittain — vain rakenne, vain data, tai mikä tahansa yhdistelmä — striimaten, vakiomuistilla. Natiivi macOS- & iPadOS-sovellus, kertaosto.
Lataa App StorestaUsein kysytyt kysymykset
Voinko viedä datan ilman skeemaa?
Kyllä. Poista käytöstä CREATE TABLE ja CREATE INDEX (tai valitse Vain data -esiasetus) ja säilytä INSERT INTO. DumpCleaner vie vain rivit, valmiina ladattaviksi jo olemassa olevaan skeemaan.
Säilyttääkö vain rakenteen vienti indeksit ja viiteavaimet?
Kyllä. Vain rakenne säilyttää CREATE TABLE-, CREATE INDEX-, ALTER TABLE -lauseet ja viiteavainmäärittelyt — kaiken, mikä määrittelee tietokannan. Vain INSERT-datarivit poistetaan.
Voinko sekoittaa — rakenteen kaikille tauluille, datan joillekin?
Kyllä. Suodatus on lausetyypeittäin ja tauluittain, ja molemmat yhdistyvät. Säilytä jokaisen taulun rakenne mutta sisällytä INSERT-data vain niille harvoille tauluille, joita oikeasti tarvitset.
Toimiiko tämä PostgreSQL:n kanssa?
Kyllä. DumpCleaner lukee MySQL-, MariaDB- ja PostgreSQL-dumppeja ja tunnistaa formaatin automaattisesti, joten vain rakenne- ja vain data -viennit toimivat samalla tavalla pg_dump-tiedostoille.
Skeema ilman dataa — tai data ilman skeemaa
Vedä, kytke lausetyypit, vie. DumpCleaner erottaa mistä tahansa dumpista juuri sen osan jonka tarvitset.
Lataa App Storesta