Ekspor hanya skema (struktur) dari dump SQL

Anda punya dump lengkap di disk, tetapi Anda hanya mau struktur — CREATE TABLE, index, foreign key — tanpa tabel log berisi 89 juta baris. Atau sebaliknya: hanya data, tanpa pernyataan CREATE. Berikut alasan flag dump biasa tidak membantu file yang sudah ada, dan cara memisahkan struktur dari data sekali klik.

Tiga situasi terus muncul:

Mengapa mysqldump --no-data tidak cukup

Saran klasiknya adalah mysqldump --no-data (struktur saja) atau mysqldump --no-create-info (data saja). Keduanya adalah flag ekspor: keduanya mengubah isi dump baru dari database yang sedang berjalan. Keduanya tidak berbuat apa-apa untuk dump yang sudah tersimpan di disk sebagai file .sql.

Dalam praktik, file itu sering datang dari orang lain, atau dari pekerjaan cadangan, atau dari server yang aksesnya tidak lagi Anda miliki. Anda tidak bisa menjalankan ulang mysqldump terhadap database yang tak terjangkau — kredensialnya hilang, server-nya sudah dinonaktifkan, atau file itu memang satu-satunya yang diserahkan kepada Anda. Pada titik itu flag tersebut sia-sia, dan Anda terpaksa mengedit file itu sendiri.

Cara manual

Langkah yang jelas adalah membuang baris dengan grep atau sed. Untuk mempertahankan struktur dan membuang data:

# pertahankan semuanya kecuali baris INSERT
grep -v '^INSERT INTO' dump.sql > schema.sql

# atau pertahankan hanya baris INSERT untuk file data saja
grep '^INSERT INTO' dump.sql > data.sql

Ini kelihatan baik-baik saja pada dump yang kecil dan rapi — lalu gagal pada yang sungguhan:

Anda pun akhirnya men-debug filter Anda sendiri alih-alih mendapatkan skema Anda.

Struktur saja atau data saja dengan DumpCleaner

DumpCleaner memahami pernyataan SQL alih-alih mencocokkan baris, sehingga memisahkan struktur dari data dengan andal — pada file berukuran berapa pun:

  1. Seret dump .sql Anda ke DumpCleaner (MySQL, MariaDB, atau PostgreSQL). DumpCleaner mem-parse file dengan streaming, jadi dump berukuran beberapa gigabyte dimuat dengan memori konstan.
  2. Aktifkan jenis pernyataan yang Anda mau: CREATE TABLE, CREATE INDEX, INSERT INTO, ALTER, DROP, LOCK, SET. Hapus centang INSERT INTO dan Anda mendapat struktur saja; hapus centang CREATE TABLE / CREATE INDEX dan Anda mendapat data saja.
  3. Atau pilih preset — Struktur saja atau Data saja — untuk mengatur semua toggle dalam satu langkah, lalu sempurnakan per tabel jika mau.
  4. Ekspor. Anda mendapat file skema ramping untuk staging atau CI, atau dump data-saja yang bersih untuk seeding.

Karena filternya sadar-pernyataan, sebuah extended INSERT multi-baris dipertahankan atau dibuang secara utuh — tidak pernah terpotong di tengah.

Kekuatan sebenarnya adalah filter bekerja per jenis pernyataan dan per tabel, dan keduanya bisa dikombinasikan. Anda bisa mempertahankan struktur setiap tabel tetapi menyertakan data INSERT hanya untuk tiga tabel yang benar-benar Anda butuhkan — meninggalkan tabel logs berisi 89 juta baris sebagai cangkang kosong. Itu sesuatu yang tidak bisa diungkapkan oleh flag --no-data mana pun.

Pisahkan struktur dari data dalam hitungan detik

DumpCleaner memfilter dump yang sudah ada berdasarkan jenis pernyataan dan berdasarkan tabel — struktur saja, data saja, atau campuran apa pun — streaming, dengan memori konstan. Aplikasi native macOS & iPadOS, sekali beli.

Unduh di App Store

Pertanyaan yang sering diajukan

Bisakah saya mengekspor data tanpa skema?

Ya. Nonaktifkan CREATE TABLE dan CREATE INDEX (atau pilih preset Data saja) dan pertahankan INSERT INTO. DumpCleaner mengekspor hanya baris-barisnya, siap dimuat ke skema yang sudah ada.

Apakah ekspor struktur-saja tetap mempertahankan index dan foreign key?

Ya. Struktur saja mempertahankan CREATE TABLE, CREATE INDEX, ALTER TABLE, dan definisi foreign key — semua yang mendefinisikan database. Hanya baris data INSERT yang dihapus.

Bisakah saya mencampur — struktur untuk semua tabel, data untuk sebagian?

Ya. Filter bekerja per jenis pernyataan dan per tabel, dan keduanya bisa dikombinasikan. Pertahankan struktur setiap tabel tetapi sertakan data INSERT hanya untuk beberapa tabel yang benar-benar Anda butuhkan.

Apakah ini berfungsi dengan PostgreSQL?

Ya. DumpCleaner membaca dump MySQL, MariaDB, dan PostgreSQL serta mendeteksi formatnya secara otomatis, jadi ekspor struktur-saja dan data-saja berfungsi dengan cara yang sama untuk file pg_dump.

Skema tanpa data — atau data tanpa skema

Seret, atur jenis pernyataan, ekspor. DumpCleaner memisahkan dump mana pun menjadi persis bagian yang Anda butuhkan.

Unduh di App Store