Eksport hanya skema (struktur) daripada dump SQL

Anda mempunyai dump penuh pada cakera, tetapi anda hanya mahu struktur — CREATE TABLE, indeks, kunci asing — tanpa jadual log 89 juta baris. Atau sebaliknya: hanya data, tanpa penyata CREATE. Ini sebab bendera dump biasa tidak membantu fail sedia ada, dan cara mengasingkan struktur daripada data dengan satu klik.

Tiga situasi kerap timbul:

Mengapa mysqldump --no-data tidak mencukupi

Nasihat klasik ialah mysqldump --no-data (struktur sahaja) atau mysqldump --no-create-info (data sahaja). Kedua-duanya ialah bendera eksport: ia mengubah apa yang terkandung dalam dump baharu daripada pangkalan data yang sedang berjalan. Ia langsung tidak berbuat apa-apa untuk dump yang sudah tersedia di cakera anda sebagai fail .sql.

Dalam praktik, fail itu selalunya datang daripada orang lain, atau daripada kerja sandaran, atau daripada pelayan yang anda tidak lagi ada capaian langsung. Anda tidak boleh menjalankan semula mysqldump terhadap pangkalan data yang tidak dapat dihubungi — kelayakannya sudah tiada, pelayan sudah dinyahtauliah, atau fail itu sahajalah yang diserahkan kepada anda. Pada ketika itu bendera tersebut tidak berguna, dan anda terpaksa menyunting fail itu sendiri.

Cara manual

Langkah yang jelas ialah membuang baris dengan grep atau sed. Untuk mengekalkan struktur dan membuang data:

# simpan semua kecuali baris INSERT
grep -v '^INSERT INTO' dump.sql > schema.sql

# atau simpan hanya baris INSERT untuk fail data sahaja
grep '^INSERT INTO' dump.sql > data.sql

Ini nampak elok pada dump kecil yang kemas — dan kemudian gagal pada yang sebenar:

Anda berakhir dengan menyahpepijat penapis anda sendiri dan bukannya mendapatkan skema anda.

Struktur sahaja atau data sahaja dengan DumpCleaner

DumpCleaner memahami penyata SQL dan bukannya memadankan baris, jadi ia mengasingkan struktur daripada data dengan boleh dipercayai — pada fail sebarang saiz:

  1. Seret dump .sql anda ke dalam DumpCleaner (MySQL, MariaDB atau PostgreSQL). Ia menghurai fail dengan menstrim, jadi dump berbilang gigabait dimuatkan dengan memori malar.
  2. Togol jenis penyata yang anda mahu: CREATE TABLE, CREATE INDEX, INSERT INTO, ALTER, DROP, LOCK, SET. Nyahtanda INSERT INTO dan anda dapat struktur sahaja; nyahtanda CREATE TABLE / CREATE INDEX dan anda dapat data sahaja.
  3. Atau pilih pratetap — Struktur sahaja atau Data sahaja — untuk menetapkan setiap togol dalam satu langkah, kemudian perhalusi setiap jadual jika anda suka.
  4. Eksport. Anda dapat fail skema yang ringkas untuk pementasan atau CI, atau dump data sahaja yang bersih untuk mengisi benih.

Kerana penapis itu peka-penyata, INSERT lanjutan berbilang baris disimpan atau dibuang secara keseluruhan — tidak pernah dikerat di tengah.

Kuasa sebenarnya ialah penapisan berfungsi setiap jenis penyata dan setiap jadual, dan kedua-duanya bergabung. Anda boleh mengekalkan struktur setiap jadual tetapi menyertakan data INSERT hanya untuk tiga jadual yang anda benar-benar perlukan — meninggalkan jadual logs 89 juta baris sebagai kerangka kosong. Itulah sesuatu yang tiada bendera --no-data dapat luahkan.

Asingkan struktur daripada data dalam beberapa saat

DumpCleaner menapis dump sedia ada mengikut jenis penyata dan mengikut jadual — struktur sahaja, data sahaja, atau sebarang campuran — secara penstriman, dengan memori malar. Aplikasi asli macOS & iPadOS, pembelian sekali sahaja.

Muat turun di App Store

Soalan lazim

Bolehkah saya mengeksport data tanpa skema?

Ya. Lumpuhkan CREATE TABLE dan CREATE INDEX (atau pilih pratetap Data sahaja) dan kekalkan INSERT INTO. DumpCleaner mengeksport hanya baris-barisnya, sedia untuk dimuatkan ke dalam skema yang sudah wujud.

Adakah eksport struktur sahaja mengekalkan indeks dan kunci asing?

Ya. Struktur sahaja mengekalkan CREATE TABLE, CREATE INDEX, ALTER TABLE dan takrifan kunci asing — segala-galanya yang menakrifkan pangkalan data. Hanya baris data INSERT yang dibuang.

Bolehkah saya campur — struktur untuk semua jadual, data untuk sebahagian?

Ya. Penapisan adalah setiap jenis penyata dan setiap jadual, dan kedua-duanya bergabung. Kekalkan struktur setiap jadual tetapi sertakan data INSERT hanya untuk beberapa jadual yang anda benar-benar perlukan.

Adakah ini berfungsi dengan PostgreSQL?

Ya. DumpCleaner membaca dump MySQL, MariaDB dan PostgreSQL serta mengesan formatnya secara automatik, jadi eksport struktur sahaja dan data sahaja berfungsi dengan cara yang sama untuk fail pg_dump.

Skema tanpa data — atau data tanpa skema

Seret, togol jenis penyata, eksport. DumpCleaner mengasingkan sebarang dump kepada tepat bahagian yang anda perlukan.

Muat turun di App Store