- 1 1. Pendahuluan
- 2 2. Penyegaran Cepat: penggunaan dasar mysqldump
- 3 3. Dump bersyarat menggunakan opsi --where
- 4 4. Poin penting saat memulihkan
- 5 5. Pemecahan Masalah / pertanyaan umum
- 5.1 Kesalahan umum dan solusinya
- 5.2 Peringatan kinerja dan operasional
- 5.3 Pertanyaan yang Sering Diajukan (FAQ)
- 5.3.1 Q1. Dapatkah kondisi WHERE digunakan di beberapa tabel?
- 5.3.2 Q2. Apakah boleh menggunakan LIKE dalam kondisi WHERE?
- 5.3.3 Q3. Bisakah saya dump skema tetapi memfilter data dengan WHERE?
- 5.3.4 Q4. Saya mendapatkan error foreign key saat memulihkan dump bersyarat
- 5.3.5 Q5. Apa pendekatan terbaik ketika data besar memakan terlalu lama?
- 6 6. Ringkasan
1. Pendahuluan
Kebutuhan untuk mengekstrak “hanya data yang diperlukan” selama operasi backup
Saat menjalankan MySQL, backup rutin sangat penting. Namun, tergantung pada situasinya, ada banyak kasus di mana “Anda tidak perlu mengekspor semua data.” Misalnya:
- Mengekstrak hanya data dari periode tertentu dari tabel yang besar
- Mengekspor hanya rekaman di mana status memiliki nilai tertentu
- Mengecualikan data lama dan memigrasikan hanya rekaman yang saat ini digunakan
- Memindahkan hanya data yang diperlukan ke lingkungan pengujian
Dalam skenario ini, opsi --where pada mysqldump sangat berguna.
Bagaimana mysqldump berhubungan dengan kondisi WHERE
Biasanya, mysqldump digunakan sebagai mekanisme untuk “mencadangkan semua baris per tabel.” Namun, dengan --where, Anda dapat menentukan kondisi layaknya klausa SQL WHERE dan membuat file dump yang hanya berisi rekaman yang diperlukan.
- Kondisi tanggal seperti
created_at >= '2024-01-01' - Kondisi status seperti
status = 'active' - Filter rentang seperti
id BETWEEN 100 AND 200 - Mengekstrak dengan beberapa kondisi yang digabungkan menggunakan AND / OR
Dengan cara ini, mysqldump bukan hanya alat backup—ia juga dapat digunakan sebagai alat ekstraksi data yang fleksibel.
Manfaat dump bersyarat
Dengan memanfaatkan --where, Anda dapat memperoleh manfaat berikut:
- Waktu backup berkurang Karena hanya rekaman yang diperlukan yang diekstrak, beban kerja menjadi lebih ringan.
- Ukuran file dump lebih kecil Sangat efektif di lingkungan dengan tabel besar.
- Migrasi data lebih efisien Anda dapat memuat hanya data yang dibutuhkan ke lingkungan pengujian atau staging.
- Ideal untuk pengarsipan Memungkinkan desain fleksibel seperti “menyimpan data lama secara terpisah sebagai arsip.”
Apa yang akan Anda pelajari dalam artikel ini
Artikel ini memberikan penjelasan komprehensif—dari dasar-dasar mysqldump hingga menulis dump yang difilter dengan WHERE, contoh praktis, peringatan operasional, dan pemecahan masalah.
- Sintaks dasar mysqldump
- Contoh praktis dump yang difilter dengan WHERE
- Pola kondisi spesifik menggunakan tanggal dan nilai status
- Cara memikirkan kinerja pada tabel besar
- Kesalahan umum dan cara memperbaikinya
- Praktik terbaik yang terhubung dengan operasi nyata
Untuk menjaga agar ramah pemula, kami menjelaskan perintah contoh secara cermat dan kapan menggunakannya.
2. Penyegaran Cepat: penggunaan dasar mysqldump
mysqldump adalah alat backup resmi MySQL. Fitur utamanya adalah dapat menyimpan data dan struktur tabel sebagai file SQL berbasis teks. Sebelum menggunakan kondisi WHERE, mari tinjau dasar-dasar yang perlu Anda ketahui.
Sintaks dasar dan opsi inti
Sintaks dasar mysqldump sangat sederhana:
mysqldump -u username -p database_name > dump.sql
Saat Anda menjalankan perintah, Anda akan diminta memasukkan kata sandi.
Dalam bentuk ini, semua tabel dalam basis data akan diekspor.
Opsi inti yang sering digunakan
mysqldump memiliki banyak opsi, tetapi yang berikut ini paling umum:
--single-transactionMembackup tabel InnoDB tanpa mengunci mereka. Aman bahkan pada sistem yang sedang berjalan.--quickMemproses baris satu per satu sambil menjaga penggunaan memori tetap rendah. Efektif untuk tabel besar.--default-character-set=utf8mb4Mencegah teks menjadi rusak dengan menentukan set karakter file dump.--no-dataMengekspor hanya struktur tabel (tanpa data).--tablesMenentukan nama tabel untuk mengekspor hanya apa yang Anda butuhkan.
Dengan menggabungkan opsi-opsi ini, Anda dapat membuat backup yang optimal untuk situasi Anda.
Cara mengekspor hanya tabel tertentu
Dengan mysqldump, Anda dapat mencantumkan nama tabel setelah nama basis data untuk mencadangkan hanya tabel‑tabel tersebut.
mysqldump -u root -p mydb users orders > selected_tables.sql
Dalam contoh ini, hanya users dan orders yang diekspor.
Ini sangat berguna ketika Anda menginginkan beberapa tabel tetapi tidak perlu seluruh basis data.
- Dump beberapa database yang ditentukan
mysqldump -u root -p --databases db1 db2 db3 > multi_db.sql - Dump semua database di server
mysqldump -u root -p --all-databases > all.sql
Karena dump yang difilter dengan WHERE pada dasarnya digunakan per tabel, penting untuk memahami konsep “dump tingkat tabel” terlebih dahulu.
Alur dasar backup-ke-restore dengan mysqldump
Alur backup dasar menggunakan mysqldump adalah sebagai berikut:
- Hasilkan file dump dengan mysqldump
- Opsional kompres dengan gzip, dll.
- Simpan di tempat yang aman (server lain, penyimpanan eksternal, dll.)
- Restore dengan mengimpor menggunakan perintah mysql
Restore dilakukan seperti ini:
mysql -u root -p mydb < dump.sql
Karena mysqldump menghasilkan SQL teks biasa, mudah ditangani dan tidak terikat pada lingkungan tertentu.
3. Dump bersyarat menggunakan opsi --where
Salah satu opsi paling kuat di mysqldump adalah --where.
Anda dapat menentukan kondisi dengan cara yang sama seperti pada klausa MySQL SELECT WHERE, dan dump hanya baris yang Anda butuhkan.
Apa yang dapat dilakukan --where?
Dump mysqldump normal mencadangkan seluruh tabel.
Namun dengan --where, Anda dapat melakukan “backup gaya ekstraksi” seperti:
- Ekstrak hanya data baru
- Dump hanya baris di mana status aktif
- Cadangkan hanya data pengguna tertentu
- Ekstrak hanya baris dalam rentang ID tertentu
- Gabungkan beberapa kondisi (AND/OR)
Inilah mengapa mysqldump dapat digunakan tidak hanya sebagai alat backup, tetapi juga sebagai
“alat migrasi data dengan filter ekstraksi.”
Sintaks dasar
Bentuk dasar --where adalah:
mysqldump -u root -p mydb mytable --where="condition_expression" > filtered.sql
Ekspresi kondisi dapat ditulis seperti klausa SQL WHERE standar.
Contoh kondisi umum
1. Filter berdasarkan ID
mysqldump -u root -p mydb users --where="id > 1000" > users_over_1000.sql
2. Filter berdasarkan tanggal (created_at adalah 2024 atau lebih baru)
mysqldump -u root -p mydb logs --where="created_at >= '2024-01-01'" > logs_2024.sql
3. Filter berdasarkan status (hanya aktif)
mysqldump -u root -p mydb orders --where="status = 'active'" > orders_active.sql
4. Beberapa kondisi (AND)
mysqldump -u root -p mydb orders \
--where="status = 'active' AND created_at >= '2024-01-01'" \
> orders_active_recent.sql
5. Gabungkan kondisi OR
mysqldump -u root -p mydb products \
--where="category = 'A' OR category = 'B'" \
> products_ab.sql
6. Pencocokan parsial dengan LIKE
mysqldump -u root -p mydb members --where="email LIKE '%@example.com'" > example_members.sql
Catatan saat menggunakan kondisi WHERE
1. Menggunakan tanda kutip ganda vs. tanda kutip tunggal
--where="status = 'active'"
Seperti ditunjukkan di atas,
Luar → tanda kutip ganda
Dalam → tanda kutip tunggal
adalah pendekatan standar.
2. Hanya dapat digunakan per tabel
--where tidak dapat digunakan untuk seluruh database.
Anda harus menentukan untuk setiap tabel.
3. Hati-hati dengan format tanggal dan string
Jika format tidak cocok dengan definisi kolom di MySQL, baris tidak akan diekstrak.
4. Kondisi berat dapat memperlambat proses
Terutama jika kondisi WHERE tidak dapat menggunakan indeks, proses dump akan lebih lambat.
Kasus penggunaan praktis
Kasus 1: Ekstrak hanya log dari periode tertentu
Contoh ini mengekstrak hanya log terbaru yang dibutuhkan untuk operasi dari tabel log yang besar.
mysqldump -u root -p app logs \
--where="created_at >= NOW() - INTERVAL 30 DAY" \
> logs_last_30days.sql
Kasus 2: Migrasi hanya pengguna aktif (ke lingkungan baru)
mysqldump -u root -p service users \
--where="status = 'active'" \
> active_users.sql
Kasus 3: Ekstrak hanya data pengguna tertentu untuk penyelidikan
mysqldump -u root -p crm payments \
--where="user_id = 42" \
> payments_user_42.sql
Kasus 4: Membagi dump berdasarkan rentang ID (untuk dataset besar)
mysqldump -u root -p mydb orders --where="id BETWEEN 1 AND 500000" > part1.sql
mysqldump -u root -p mydb orders --where="id BETWEEN 500001 AND 1000000" > part2.sql
Ini adalah pendekatan praktis yang umum digunakan untuk tabel yang sangat besar.
Praktik terbaik (pengaturan yang direkomendasikan)
- Gabungkan dengan
--single-transactionUntuk InnoDB, Anda dapat menghindari kunci sambil menjaga backup yang konsisten. - Gunakan
--quickuntuk mengurangi penggunaan memori - Pastikan kolom dump memiliki indeks Jika WHERE lambat, biasanya karena tidak ada indeks.
- Kompres dengan gzip untuk mengurangi ukuran file Contoh:
mysqldump ... | gzip > backup.sql.gz - Hati-hati saat menjalankan selama jam kerja Karena dapat menyebabkan beban, disarankan menjalankannya pada malam hari atau jendela pemeliharaan.
4. Poin penting saat memulihkan
Bahkan jika file dump diekstrak dengan kondisi WHERE, prosedur pemulihan dasar tetap sama dengan pemulihan mysqldump normal. Namun, karena berisi “hanya catatan terpilih,” ada beberapa hal yang perlu Anda perhatikan.
Prosedur pemulihan dari dump bersyarat
Metode pemulihan yang paling standar adalah:
mysql -u root -p database_name < dump.sql
Saat Anda menjalankan perintah ini, pernyataan CREATE TABLE dan INSERT yang termasuk dalam output mysqldump diterapkan ke basis data apa adanya.
Namun, untuk dump yang difilter dengan WHERE, Anda perlu memperhatikan poin-poin berikut.
Catatan saat memulihkan dump yang difilter dengan WHERE
1. Mungkin bertentangan dengan data yang ada di tabel asli
Dump bersyarat mengekstrak “hanya beberapa catatan.”
Sebagai contoh:
- Tabel tujuan sudah memiliki kunci utama (id) yang sama
- INSERT parsial menyebabkan duplikat
Dalam kasus seperti itu, Anda mungkin melihat kesalahan seperti ini selama impor:
ERROR 1062 (23000): Duplicate entry '1001' for key 'PRIMARY'
→ Tindakan Pencegahan
- TRUNCATE tabel target terlebih dahulu jika diperlukan
- Modifikasi SQL sehingga Anda dapat menggunakan
INSERT IGNOREatauON DUPLICATE KEY UPDATE - Pastikan bahwa tujuan adalah “tabel kosong” pada awalnya
Karena mysqldump menghasilkan pernyataan INSERT secara default, Anda harus berhati-hati terhadap duplikat.
2. Waspadai batasan kunci asing
Dump bersyarat tidak secara otomatis mengekstrak semua tabel terkait secara bersamaan.
Contoh:
- Ekstrak hanya tabel users dengan WHERE
- Tetapi tabel orders yang merujuk ke user_id tidak ada
Dalam kasus ini, kesalahan kunci asing dapat terjadi selama pemulihan.
→ Tindakan Pencegahan
- Nonaktifkan sementara pemeriksaan kunci asing menggunakan
SET FOREIGN_KEY_CHECKS=0; - Jika diperlukan, dump tabel terkait dengan kondisi yang sama
- Pahami sebelumnya apakah integritas referensial diperlukan untuk kasus penggunaan Anda

3. Waspadai perbedaan skema (migrasi dev vs. produksi)
Jika struktur tabel berbeda antara pengembangan dan produksi, kesalahan dapat terjadi selama pemulihan.
Contoh:
- Kolom A ada secara lokal tetapi dihapus di produksi
- Produksi memiliki NOT NULL, tetapi data dump mencakup NULL
- Urutan kolom atau tipe data berbeda
→ Tindakan Pencegahan
- Periksa sebelumnya dengan
SHOW CREATE TABLE table_name; - Jika diperlukan, gunakan
--no-create-info(kecualikan skema) dan hanya muat data - Samakan skema sebelum melakukan dump dan pemulihan
Menggunakannya untuk backup diferensial dan migrasi
Dump yang difilter dengan WHERE sangat efektif ketika Anda ingin “memindahkan hanya data yang Anda butuhkan ke lingkungan lain.”
1. Migrasikan hanya rentang yang diperlukan ke lingkungan pengujian
- Hanya log 30 hari terakhir
- Hanya pengguna aktif
- Hanya periode penjualan yang ingin Anda validasi
Ekstraksi ini juga berkontribusi secara signifikan dalam mengurangi ukuran basis data pengujian.
2. Mengarsipkan data lama
Jika basis data produksi terus bertambah, Anda dapat mengekstrak hanya data lama dan menyimpannya secara terpisah seperti ini:
mysqldump -u root -p mydb logs \
--where="created_at < '2023-01-01'" \
> logs_archive_2022.sql
3. Catatan tentang penggabungan
Jika Anda menggabungkan beberapa dump bersyarat dan memuatnya ke dalam satu tabel, Anda harus memperhatikan dengan seksama kunci utama dan konsistensi.
Ringkasan: Dump yang difilter dengan WHERE sangat kuat, tetapi pulihkan dengan hati-hati
Opsi WHERE pada mysqldump sangat praktis, tetapi untuk pemulihan Anda harus memperhatikan hal-hal berikut:
- Catatan duplikat dengan tabel tujuan/asli
- Kendala kunci asing
- Ketidaksesuaian skema
- Potensi masalah konsistensi akibat penyaringan
Dengan begitu, jika Anda menguasai dump bersyarat, pencadangan harian, pengarsipan, dan migrasi data Anda akan menjadi jauh lebih efisien.
5. Pemecahan Masalah / pertanyaan umum
mysqldump tampak seperti alat sederhana, tetapi ketika digabungkan dengan kondisi WHERE, kesalahan tak terduga dapat terjadi tergantung pada lingkungan runtime Anda, struktur data, dan pengaturan izin. Bagian ini secara sistematis menjelaskan masalah umum di dunia nyata dan cara mengatasinya.
Kesalahan umum dan solusinya
1. Hak istimewa tidak cukup (Akses ditolak)
mysqldump: Got error: 1044: Access denied for user ...
Penyebab utama
- Hak SELECT yang hilang
- Hak tambahan mungkin diperlukan ketika trigger atau view disertakan
- Gagal saat mencoba dump basis data sistem
mysql
Cara memperbaiki
- Setidaknya, berikan hak SELECT pada tabel target
- Jika ada view →
SHOW VIEW - Jika ada trigger →
TRIGGER - Jika memungkinkan, buat pengguna cadangan khusus
2. Filter WHERE tidak berlaku dan semua data terdump
Penyebab
- Kutipan yang tidak tepat
- Karakter khusus diinterpretasikan oleh shell
- Ekspresi tidak cocok dengan kolom (ketidaksesuaian format string/tanggal)
Contoh (kesalahan umum)
--where=status='active'
Bentuk yang benar
--where="status = 'active'"
Cara memperbaiki
- Gunakan tanda kutip ganda di luar dan tanda kutip tunggal di dalam
- Lakukan hal yang sama saat menggunakan LIKE, >, atau < (bungkus dalam kutipan)
- Periksa bahwa format tanggal cocok dengan cara penyimpanan di DB
3. Ukuran dump tidak biasa besar / pemrosesan lambat
Penyebab
- Tidak ada indeks pada kolom yang digunakan dalam kondisi WHERE
- Menggunakan pencocokan non- prefiks seperti LIKE ‘%keyword’
- Kondisi terlalu kompleks
- Memindai tabel besar tanpa indeks
Cara memperbaiki
- Pertimbangkan menambahkan indeks pada kolom yang digunakan dalam WHERE
- Untuk tabel besar, bagi dump menjadi beberapa kali jalankan berdasarkan rentang ID
- Selalu gunakan
--quickuntuk mengurangi beban memori - Jalankan pada malam hari atau selama jam lalu lintas rendah
4. Teks berantakan (masalah pengkodean karakter)
Penyebab
- Set karakter default berbeda per lingkungan
- Set karakter saat dump dan saat pemulihan tidak cocok
- Mencampur utf8 dan utf8mb4
Cara memperbaiki
Selalu tentukan set karakter saat melakukan dump:
--default-character-set=utf8mb4
※ Menggunakan pengaturan yang sama saat pemulihan membantu mencegah teks berantakan.
5. Tidak dapat mengimpor karena Entri Duplikat (duplikasi kunci utama)
Karena dump bersyarat mengekstrak “hanya catatan yang diperlukan,” Anda akan mendapatkan kesalahan duplikat ketika:
- Tabel yang ada sudah memiliki ID yang sama
- Anda mencoba menggabungkan dump dan duplikat terjadi
Cara memperbaiki
- TRUNCATE tabel tujuan
- Edit SQL sesuai kebutuhan dan ubah menjadi
INSERT IGNORE - Untuk penggabungan, periksa duplikat sebelum memuat
Peringatan kinerja dan operasional
Strategi dasar untuk dataset besar
- Bagi dump berdasarkan rentang ID
- Bagi menjadi beberapa file berdasarkan rentang tanggal
- Kompres dengan
gzipataupigzjika diperlukan - Jalankan selama jam beban rendah, seperti larut malam
Tentang risiko penguncian
MyISAM mengunci tabel selama proses dump.
Untuk InnoDB, opsi berikut disarankan:
--single-transaction
This helps you extract consistent data while mostly avoiding locks.
Daftar periksa operasional
- Validate the WHERE condition with a SELECT query in advance → Validasi kondisi WHERE dengan kueri SELECT terlebih dahulu
- Check disk space before dumping → Periksa ruang disk sebelum melakukan dump
- Always store dump files securely (encrypt and/or compress) → Selalu simpan file dump dengan aman (enkripsi dan/atau kompres)
- Confirm the destination table schema matches → Pastikan skema tabel tujuan cocok
Pertanyaan yang Sering Diajukan (FAQ)
Q1. Dapatkah kondisi WHERE digunakan di beberapa tabel?
Tidak.
mysqldump’s WHERE filtering works per table. → Penyaringan WHERE pada mysqldump bekerja per tabel.
You cannot use JOIN. → Anda tidak dapat menggunakan JOIN.
Q2. Apakah boleh menggunakan LIKE dalam kondisi WHERE?
Ya, Anda bisa. Namun, pencocokan non-awalan seperti %keyword tidak dapat menggunakan indeks dan akan lebih lambat.
Q3. Bisakah saya dump skema tetapi memfilter data dengan WHERE?
Jika Anda hanya membutuhkan skema, Anda dapat menggunakan --no-data, sehingga kondisi WHERE biasanya tidak diperlukan.
Q4. Saya mendapatkan error foreign key saat memulihkan dump bersyarat
Run the following to temporarily disable constraints:
SET FOREIGN_KEY_CHECKS=0;
Namun, hati-hati agar tidak merusak konsistensi.
Q5. Apa pendekatan terbaik ketika data besar memakan terlalu lama?
- Check whether the WHERE columns are indexed → Periksa apakah kolom WHERE diindeks
- Split into multiple dumps using ID ranges → Bagi menjadi beberapa dump menggunakan rentang ID
- Use
--quick→ Gunakan--quick - Move execution time to late night. These are the most effective approaches in real operations. → Pindahkan waktu eksekusi ke larut malam. Ini adalah pendekatan paling efektif dalam operasi nyata.
6. Ringkasan
mysqldump adalah salah satu alat backup paling mudah digunakan di MySQL, dan dengan menggabungkannya dengan opsi --where, Anda dapat melampaui backup sederhana dan menggunakannya sebagai “alat ekstraksi data yang fleksibel.”
Dalam operasi dunia nyata, Anda sering perlu mengekstrak hanya periode tertentu, hanya status tertentu, atau membagi data besar menjadi bagian yang lebih kecil. Dalam situasi seperti itu, --where sangat kuat dan berkontribusi secara signifikan pada manajemen data yang efisien.
Poin-poin utama yang dibahas dalam artikel ini
- Sintaks dasar mysqldump Backup sederhana dimungkinkan dengan hanya menentukan nama pengguna dan nama basis data.
- Dump bersyarat dengan
--whereEkstrak hanya catatan yang diperlukan, seperti klausa SQL WHERE. - Contoh kondisi praktis Mendukung banyak pola penyaringan: rentang tanggal, status, rentang ID, LIKE, dan kondisi gabungan.
- Peringatan pemulihan Saat memuat data parsial, perhatikan duplikat dan batasan foreign key.
- Masalah umum dan langkah penanggulangan Mencakup hak istimewa yang tidak cukup, WHERE tidak diterapkan, penurunan kinerja, masalah enkoding, dan duplikasi primary key.
Manfaat dump yang difilter dengan WHERE
- Backup lebih cepat Tidak perlu membackup semuanya—penyaringan mengurangi waktu pemrosesan.
- Ukuran file lebih kecil Sangat efektif untuk tabel besar.
- Migrasi data lebih mudah ke lingkungan test/staging Muat hanya data yang Anda butuhkan.
- Berguna untuk pengarsipan Memudahkan pengelolaan data lama sebagai file terpisah.
Apa yang dapat dicoba selanjutnya
Setelah Anda memahami dump yang difilter dengan WHERE, Anda juga dapat mempertimbangkan langkah selanjutnya berikut:
- Mengotomatiskan backup dengan cron (Linux) menggunakan skrip backup
- Kompresi otomatis dikombinasikan dengan gzip atau zip
- Menggunakan alat backup fisik yang lebih cepat selain mysqldump (seperti Percona XtraBackup)
- Desain backup untuk lingkungan skala besar
mysqldump sederhana, tetapi dengan pemahaman dan penggunaan yang tepat, ia sangat memperluas opsi desain backup Anda.

