Tiga situasi terus muncul:
- Menyiapkan skema untuk staging atau CI — Anda mau struktur tabel yang kosong agar pengujian bisa berjalan terhadap kolom, index, dan constraint sungguhan, tetapi Anda sama sekali tidak mau mengirim gigabyte baris produksi ke lingkungan sekali pakai.
- Data seed saja — skema sudah ada di database target, dan Anda hanya butuh baris INSERT untuk mengisinya, tanpa pernyataan CREATE yang akan berbenturan dengan yang sudah ada.
- Menyingkirkan noise — dump membengkak oleh tabel
logs,sessions,audit_trail, ataucacheberisi puluhan juta baris yang tidak pernah ingin Anda impor.
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:
- INSERT multi-baris. Satu
INSERT INTO … VALUESbisa membentang ribuan baris.grepmencocokkan baris pertama dan meninggalkan sisa nilainya yatim, menghasilkan file yang rusak. - Extended insert. mysqldump menggabungkan banyak baris ke dalam satu pernyataan raksasa. Filter berbasis baris tidak bisa mengetahui di mana pernyataan seperti itu berakhir.
- Komentar dan blok. Blok kondisional
/*! … */,LOCK TABLES, dan komentar--berselang-seling dengan data, sehingga filter naif entah mempertahankan sampah atau memotong sesuatu yang dibutuhkan saat impor. - Data saja lebih buruk.
grep '^INSERT'murni membuang pernyataanSETdanLOCKyang menjadi tumpuan baris-baris itu, dan setiap INSERT yang tidak dimulai persis di kolom nol diam-diam menghilang.
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:
- Seret dump
.sqlAnda ke DumpCleaner (MySQL, MariaDB, atau PostgreSQL). DumpCleaner mem-parse file dengan streaming, jadi dump berukuran beberapa gigabyte dimuat dengan memori konstan. - 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.
- Atau pilih preset — Struktur saja atau Data saja — untuk mengatur semua toggle dalam satu langkah, lalu sempurnakan per tabel jika mau.
- 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 StorePertanyaan 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