Trīs situācijas atkārtojas atkal un atkal:
- Uzcelt shēmu izmēģinājuma videi vai CI — tu vēlies tukšo tabulu struktūru, lai testi varētu darboties pret īstām kolonnām, indeksiem un ierobežojumiem, bet tu noteikti nevēlies nogādāt gigabaitus produkcijas rindu vienreizējā vidē.
- Tikai sēklu dati — shēma jau eksistē mērķa datubāzē, un tev vienkārši vajag INSERT rindas, lai to aizpildītu, bez CREATE priekšrakstiem, kas sadurtos ar to, kas tur ir.
- Atbrīvoties no trokšņa — izgāztuvi uzpūš
logs,sessions,audit_trailvaicachetabulas ar desmitiem miljonu rindu, kuras tu nekad nevēlies importēt.
Kāpēc mysqldump --no-data nav pietiekami
Klasiskais padoms ir mysqldump --no-data (tikai struktūra) vai mysqldump --no-create-info (tikai dati). Abi ir eksporta karodziņi: tie maina to, ko satur jauna izgāztuve no darbojošās datubāzes. Tie neko nedara izgāztuvei, kas tev jau ir diskā kā .sql fails.
Praksē fails bieži nonāk no kāda cita, vai no rezerves kopēšanas darba, vai no servera, kuram tev vairs nav dzīvas piekļuves. Tu nevari atkārtoti palaist mysqldump pret datubāzi, kas nav sasniedzama — akreditācijas dati ir pazuduši, serveris ir izņemts no ekspluatācijas, vai fails ir vienkārši viss, kas tev tika iedots. Tajā brīdī karodziņi ir bezjēdzīgi, un tev jārediģē pats fails.
Manuālais veids
Acīmredzamais solis ir izņemt rindas ar grep vai sed. Lai paturētu struktūru un izmestu datus:
# patur visu, izņemot INSERT rindas grep -v '^INSERT INTO' dump.sql > schema.sql # vai patur tikai INSERT rindas tikai datu failam grep '^INSERT INTO' dump.sql > data.sql
Tas izskatās labi mazā, kārtīgā izgāztuvē — un tad salūst īstā:
- Daudzrindu INSERT. Viens
INSERT INTO … VALUESvar aptvert tūkstošiem rindu.grepsakrīt ar pirmo rindu un atstāj pārējās vērtības kā bāreņus, radot bojātu failu. - Paplašinātie ievietojumi. mysqldump apvieno daudzas rindas vienā milzīgā priekšrakstā. Uz rindām balstīti filtri nevar pateikt, kur šāds priekšraksts beidzas.
- Komentāri un bloki. Nosacījuma
/*! … */bloki,LOCK TABLESun--komentāri mijas ar datiem, tāpēc naivs filtrs vai nu patur atkritumus, vai izgriež kaut ko, kas importam ir vajadzīgs. - Tikai dati ir vēl sliktāk. Tīrs
grep '^INSERT'izmetSETunLOCKpriekšrakstus, no kuriem rindas ir atkarīgas, un jebkurš INSERT, kas nesākas tieši nulles kolonnā, klusi pazūd.
Tu galu galā atkļūdo savu paša filtru, nevis iegūsti savu shēmu.
Tikai struktūra vai tikai dati ar DumpCleaner
DumpCleaner saprot SQL priekšrakstus, nevis sakrīt ar rindām, tāpēc tas droši atdala struktūru no datiem — jebkura izmēra failos:
- Ievelc savu
.sqlizgāztuvi DumpCleaner (MySQL, MariaDB vai PostgreSQL). Tas parsē failu, straumējot, tāpēc daudzu gigabaitu izgāztuve ielādējas ar nemainīgu atmiņu. - Pārslēdz priekšrakstu tipus, kurus vēlies: CREATE TABLE, CREATE INDEX, INSERT INTO, ALTER, DROP, LOCK, SET. Noņem atzīmi INSERT INTO, un tu iegūsti tikai struktūru; noņem atzīmi CREATE TABLE / CREATE INDEX, un tu iegūsti tikai datus.
- Vai izvēlies iepriekšiestatījumu — Tikai struktūra vai Tikai dati — lai iestatītu katru pārslēgu vienā solī, tad, ja vēlies, precizē pa tabulai.
- Eksportē. Tu iegūsti kompaktu shēmas failu izmēģinājuma videi vai CI, vai tīru tikai datu izgāztuvi sēklošanai.
Tā kā filtrs ir priekšrakstus apzinošs, daudzrindu paplašināts INSERT tiek paturēts vai izmests kā vesels — nekad negriezts vidū.
Īstais spēks ir tas, ka filtrēšana darbojas pa priekšraksta tipam un pa tabulai, un abi apvienojas. Tu vari paturēt katras tabulas struktūru, bet iekļaut INSERT datus tikai trim tabulām, kuras patiešām vajag — atstājot 89 miljonu rindu logs tabulu kā tukšu čaulu. Tas ir kaut kas, ko neviens --no-data karodziņš nevar izteikt.
Atdali struktūru no datiem dažās sekundēs
DumpCleaner filtrē esošu izgāztuvi pa priekšraksta tipam un pa tabulai — tikai struktūru, tikai datus vai jebkuru sajaukumu — straumējot, ar nemainīgu atmiņu. Vietējā macOS un iPadOS lietotne, vienreizējs pirkums.
Lejupielādēt App StoreBiežāk uzdotie jautājumi
Vai es varu eksportēt datus bez shēmas?
Jā. Atspējo CREATE TABLE un CREATE INDEX (vai izvēlies Tikai dati iepriekšiestatījumu) un patur INSERT INTO. DumpCleaner eksportē tikai rindas, gatavas ielādēšanai shēmā, kas jau eksistē.
Vai tikai struktūras eksports saglabā indeksus un ārējās atslēgas?
Jā. Tikai struktūra patur CREATE TABLE, CREATE INDEX, ALTER TABLE un ārējo atslēgu definīcijas — visu, kas definē datubāzi. Tiek noņemtas tikai INSERT datu rindas.
Vai es varu sajaukt — struktūru visām tabulām, datus dažām?
Jā. Filtrēšana ir pa priekšraksta tipam un pa tabulai, un abi apvienojas. Patur katras tabulas struktūru, bet iekļauj INSERT datus tikai tām dažām tabulām, kuras patiešām vajag.
Vai tas darbojas ar PostgreSQL?
Jā. DumpCleaner nolasa MySQL, MariaDB un PostgreSQL izgāztuves un nosaka formātu automātiski, tāpēc tikai struktūras un tikai datu eksporti darbojas tāpat arī pg_dump failiem.
Shēma bez datiem — vai dati bez shēmas
Ievelc, pārslēdz priekšrakstu tipus, eksportē. DumpCleaner sadala jebkuru izgāztuvi tieši tajā daļā, kura tev vajadzīga.
Lejupielādēt App Store