Kaip iš SQL išklotinės eksportuoti tik schemą (struktūrą)

Diske turite pilną išklotinę, bet norite tik struktūros — CREATE TABLE, indeksų, išorinių raktų — be 89 milijonų eilučių žurnalo lentelių. Arba atvirkščiai: tik duomenų, jokių CREATE sakinių. Štai kodėl įprasti išklotinės parametrai nepadeda esamam failui ir kaip vienu paspaudimu atskirti struktūrą nuo duomenų.

Nuolat pasikartoja trys situacijos:

Kodėl mysqldump --no-data neužtenka

Klasikinis patarimas — mysqldump --no-data (tik struktūra) arba mysqldump --no-create-info (tik duomenys). Abu yra eksporto parametrai: jie keičia tai, ką turės nauja išklotinė iš veikiančios duomenų bazės. Jie nieko nepadeda išklotinei, kurią jau turite gulinčią diske kaip .sql failą.

Praktikoje failas dažnai ateina iš kito žmogaus, iš atsarginės kopijos užduoties arba iš serverio, prie kurio nebeturite tiesioginės prieigos. Negalite iš naujo paleisti mysqldump prieš duomenų bazę, kuri nepasiekiama — prisijungimo duomenys dingę, serveris nurašytas arba failas tiesiog yra viskas, ką jums perdavė. Tuomet parametrai bevertis, ir jums lieka redaguoti patį failą.

Rankinis būdas

Akivaizdus ėjimas — pašalinti eilutes su grep ar sed. Norėdami palikti struktūrą ir atmesti duomenis:

# palikti viską, išskyrus INSERT eilutes
grep -v '^INSERT INTO' dump.sql > schema.sql

# arba palikti tik INSERT eilutes tik duomenų failui
grep '^INSERT INTO' dump.sql > data.sql

Mažoje, tvarkingoje išklotinėje tai atrodo tvarkingai — o tada lūžta ties tikra:

Galiausiai užuot gavę savo schemą, derinsite savo paties filtrą.

Tik struktūra arba tik duomenys su DumpCleaner

DumpCleaner supranta SQL sakinius, o ne atitikinėja eilutes, todėl patikimai atskiria struktūrą nuo duomenų — bet kokio dydžio failuose:

  1. Nutempkite savo .sql išklotinę į DumpCleaner (MySQL, MariaDB ar PostgreSQL). Ji analizuoja failą srautiniu būdu, todėl kelių gigabaitų išklotinė įkeliama su pastoviu atminties naudojimu.
  2. Perjunkite norimus sakinių tipus: CREATE TABLE, CREATE INDEX, INSERT INTO, ALTER, DROP, LOCK, SET. Atžymėkite INSERT INTO ir gausite tik struktūrą; atžymėkite CREATE TABLE / CREATE INDEX ir gausite tik duomenis.
  3. Arba pasirinkite šabloną — Tik struktūra arba Tik duomenys — kad vienu žingsniu nustatytumėte visus perjungiklius, tada, jei norite, patikslinkite pagal lentelę.
  4. Eksportuokite. Gaunate lieknesnį schemos failą testinei aplinkai ar CI arba švarų tik duomenų dump pradinių duomenų įkėlimui.

Kadangi filtras supranta sakinius, kelių eilučių išplėstas INSERT paliekamas arba atmetamas kaip visuma — niekada neperkerpamas per vidurį.

Tikroji galia ta, kad filtravimas veikia pagal sakinio tipą ir pagal lentelę, ir šie du deriniai jungiasi. Galite palikti kiekvienos lentelės struktūrą, bet įtraukti INSERT duomenis tik toms trims lentelėms, kurių jums iš tikrųjų reikia — palikdami 89 milijonų eilučių logs lentelę kaip tuščią kiautą. To negali išreikšti joks --no-data parametras.

Atskirkite struktūrą nuo duomenų per kelias sekundes

DumpCleaner filtruoja esamą išklotinę pagal sakinio tipą ir pagal lentelę — tik struktūra, tik duomenys ar bet koks derinys — srautiniu būdu, su pastoviu atminties naudojimu. Vietinė macOS ir iPadOS programa, vienkartinis pirkimas.

Atsisiųsti iš App Store

Dažnai užduodami klausimai

Ar galiu eksportuoti duomenis be schemos?

Taip. Išjunkite CREATE TABLE ir CREATE INDEX (arba pasirinkite šabloną „Tik duomenys“) ir palikite INSERT INTO. DumpCleaner eksportuoja tik eilutes, pasiruošusias įkelti į jau egzistuojančią schemą.

Ar tik struktūros eksportas išsaugo indeksus ir išorinius raktus?

Taip. Tik struktūra išsaugo CREATE TABLE, CREATE INDEX, ALTER TABLE ir išorinių raktų apibrėžimus — viską, kas apibrėžia duomenų bazę. Pašalinamos tik INSERT duomenų eilutės.

Ar galiu maišyti — struktūrą visoms lentelėms, duomenis kai kurioms?

Taip. Filtravimas veikia pagal sakinio tipą ir pagal lentelę, ir abu deriniai jungiasi. Palikite kiekvienos lentelės struktūrą, bet įtraukite INSERT duomenis tik toms kelioms lentelėms, kurių iš tikrųjų reikia.

Ar tai veikia su PostgreSQL?

Taip. DumpCleaner skaito MySQL, MariaDB ir PostgreSQL išklotines bei automatiškai aptinka formatą, todėl tik struktūros ir tik duomenų eksportas pg_dump failams veikia lygiai taip pat.

Schema be duomenų — arba duomenys be schemos

Nutempkite, perjunkite sakinių tipus, eksportuokite. DumpCleaner padalina bet kokią išklotinę į būtent tą dalį, kurios jums reikia.

Atsisiųsti iš App Store