Alat mongodump menyalin isi basis data MongoDB menjadi berkas BSON di folder cadangan, sedangkan mongorestore membaca folder tersebut dan menulis kembali isinya ke server. Topik ini membahas pengambilan cadangan satu basis data dengan mongodump, struktur folder yang dihasilkannya, pemulihan data dengan mongorestore, serta fitur cadangan otomatis yang dikelola Atlas. Data contohnya berupa koleksi log_kegiatan dan catatan_pemeliharaan pada basis data operasional, sehingga hasil pemulihan dapat diperiksa dengan menghitung ulang dokumennya.
Mengambil cadangan dengan mongodump#
mongodump adalah alat command line yang berjalan terpisah dari server. Alat ini tersambung ke server sebagai klien biasa, membaca koleksi yang diminta, lalu menulis setiap koleksi sebagai satu berkas BSON. Di samping berkas data, mongodump menulis satu berkas metadata JSON per koleksi yang memuat definisi indeksnya. Karena berjalan sebagai klien, mongodump dapat dijalankan dari mesin mana pun yang memiliki akses jaringan ke server, termasuk ketika server tersebut adalah anggota replica set.
Isi basis data contoh disiapkan terlebih dahulu melalui mongosh. Koleksi log_kegiatan memuat enam catatan aktivitas harian, sedangkan catatan_pemeliharaan memuat tiga catatan pekerjaan rutin pada server.
use operasionalswitched to db operasionaldb.log_kegiatan.insertMany([
{ waktu: "2026-11-01", modul: "sinkronisasi", kegiatan: "mulai layanan", durasiDetik: 12 },
{ waktu: "2026-11-01", modul: "sinkronisasi", kegiatan: "selesai unggah berkas", durasiDetik: 5 },
{ waktu: "2026-11-02", modul: "arsip", kegiatan: "perpindahan arsip harian", durasiDetik: 30 },
{ waktu: "2026-11-02", modul: "arsip", kegiatan: "hapus arsip sementara", durasiDetik: 8 },
{ waktu: "2026-11-02", modul: "laporan", kegiatan: "susun ringkasan harian", durasiDetik: 15 },
{ waktu: "2026-11-02", modul: "laporan", kegiatan: "kirim ringkasan ke berkas", durasiDetik: 3 }
]).acknowledgedtruedb.catatan_pemeliharaan.insertMany([
{ tanggal: "2026-10-28", komponen: "indeks", isi: "pembuatan ulang indeks log_kegiatan selesai" },
{ tanggal: "2026-10-30", komponen: "penyimpanan", isi: "pembersihan berkas sementara pada server" },
{ tanggal: "2026-11-02", komponen: "indeks", isi: "pemeriksaan ukuran indeks harian" }
]).acknowledgedtruePerintah mongodump menerima opsi --db untuk membatasi sumber cadangan dan --out untuk folder tujuannya. Pesan prosesnya ditulis ke stderr sehingga pada contoh berikut disenyapkan, sedangkan isi folder cadangan diperiksa dengan ls. Agar langkah cadangan dapat diulang dari keadaan yang sama tanpa bergantung pada sesi mongosh, basis data contoh dibangun ulang dari nol oleh skrip persiapan noninteraktif di awal blok berikut. Dengan cara itu, folder cadangan hanya memuat kedua koleksi milik topik ini.
# menyiapkan ulang isi kedua koleksi agar cadangan diambil dari keadaan yang sama
PATH=/home/kal/tools:$PATH mongosh --quiet --norc --eval '
db.getSiblingDB("operasional").dropDatabase()
db.getSiblingDB("operasional").log_kegiatan.insertMany([
{ waktu: "2026-11-01", modul: "sinkronisasi", kegiatan: "mulai layanan", durasiDetik: 12 },
{ waktu: "2026-11-01", modul: "sinkronisasi", kegiatan: "selesai unggah berkas", durasiDetik: 5 },
{ waktu: "2026-11-02", modul: "arsip", kegiatan: "perpindahan arsip harian", durasiDetik: 30 },
{ waktu: "2026-11-02", modul: "arsip", kegiatan: "hapus arsip sementara", durasiDetik: 8 },
{ waktu: "2026-11-02", modul: "laporan", kegiatan: "susun ringkasan harian", durasiDetik: 15 },
{ waktu: "2026-11-02", modul: "laporan", kegiatan: "kirim ringkasan ke berkas", durasiDetik: 3 }
])
db.getSiblingDB("operasional").catatan_pemeliharaan.insertMany([
{ tanggal: "2026-10-28", komponen: "indeks", isi: "pembuatan ulang indeks log_kegiatan selesai" },
{ tanggal: "2026-10-30", komponen: "penyimpanan", isi: "pembersihan berkas sementara pada server" },
{ tanggal: "2026-11-02", komponen: "indeks", isi: "pemeriksaan ukuran indeks harian" }]
)' >/dev/null 2>&1
# mengambil cadangan db operasional ke folder cadangan (pesan proses disenyapkan)
rm -rf /tmp/cadangan-latihan
PATH=/home/kal/tools:$PATH mongodump --db operasional --out /tmp/cadangan-latihan 2>/dev/null
# menampilkan isi hasil cadangan
ls /tmp/cadangan-latihan/operasional/catatan_pemeliharaan.bson
catatan_pemeliharaan.metadata.json
log_kegiatan.bson
log_kegiatan.metadata.json
prelude.jsonOpsi --eval menjalankan skrip JavaScript tanpa membuka shell interaktif, sehingga skrip persiapan data dan pembaruan otomatis dapat ditulis sebagai satu perintah. Folder operasional pada folder cadangan memuat sepasang berkas untuk setiap koleksi, yaitu berkas .bson yang berisi data dan berkas .metadata.json yang berisi definisi indeksnya. Berkas prelude.json mencatat versi server dan versi alat yang dipakai saat cadangan diambil. Isi berkas metadata memuat pula pengenal unik koleksi yang berbeda pada setiap pembuatan koleksi, sehingga berkas itu tidak ditampilkan pada contoh. Folder /tmp/cadangan-latihan sendiri berisi satu subfolder per basis data yang dicadangkan, sehingga cadangan beberapa basis data tetap terpisah rapi.
Memulihkan data dengan mongorestore#
mongorestore membaca folder hasil mongodump dan menulis kembali koleksinya ke server. Opsi --db menentukan nama basis data tujuan, sedangkan folder sumber ditulis sebagai argumen terakhir. Opsi --drop mengosongkan setiap koleksi tujuan sebelum datanya ditulis, sehingga hasil pemulihan persis sama dengan isi cadangan.
Langkah pertama adalah mensimulasikan kehilangan data. Perintah dropDatabase menghapus basis data operasional beserta seluruh koleksinya, sehingga keadaan server menyerupai kehilangan data yang sesungguhnya. Hanya field ok dari keluaran yang dicetak agar ringkas.
# mensimulasikan kehilangan data dengan menghapus basis data operasional
PATH=/home/kal/tools:$PATH mongosh --quiet --norc --eval 'db.getSiblingDB("operasional").dropDatabase().ok'1Pemulihan dijalankan dengan --drop, lalu banyaknya dokumen log_kegiatan dihitung ulang. Angka 6 menegaskan seluruh isi cadangan kembali utuh, dan koleksi catatan_pemeliharaan kembali bersama tiga dokumennya.
# memulihkan basis data dari folder cadangan
PATH=/home/kal/tools:$PATH mongorestore --drop --db operasional /tmp/cadangan-latihan/operasional 2>/dev/null
# menghitung dokumen log_kegiatan setelah pemulihan
PATH=/home/kal/tools:$PATH mongosh --quiet --norc --eval 'db.getSiblingDB("operasional").log_kegiatan.countDocuments()'6Fitur cadangan pada Atlas#
Atlas mengelola cadangan secara otomatis pada sisi layanannya. Fitur cloud backup menyimpan snapshot kluster pada interval yang diatur, sedangkan fitur pemulihan titik waktu (point-in-time restore) mengembalikan keadaan data pada saat tertentu dengan memanfaatkan oplog. Snapshot dipulihkan ke kluster baru atau ke kluster yang sama tanpa perlu menjalankan mongorestore secara manual, dan kebijakan penyimpanannya diatur melalui antarmuka Atlas.
mongodump tetap dapat diarahkan ke kluster Atlas melalui opsi --uri beserta connection string kluster tersebut. Contoh berikut tidak dijalankan karena membutuhkan kluster Atlas milik sendiri beserta kredensialnya.
# tidak-dijalankan
# mengambil cadangan basis data operasional dari kluster Atlas
mongodump --uri "mongodb+srv://pengguna-latihan:[email protected]/operasional" --out /tmp/cadangan-atlasBerkas cadangan memuat seluruh isi data, sehingga berkas tersebut perlu diperlakukan sebagai data sensitif. Simpan cadangan pada penyimpanan yang terpisah dari server, batasi hak akses foldernya, dan enkripsi arsipnya ketika dikirim ke tempat lain. Cadangan yang mudah diambil tetapi juga mudah diambil pihak lain merupakan risiko keamanan yang setara dengan kehilangan data.
Kesalahan umum#
Kesalahan pertama adalah menjalankan mongodump tanpa opsi --db. Tanpa opsi itu, mongodump mencadangkan seluruh basis data pada server dan membuat satu folder per basis data di dalam folder tujuan. Perilaku itu sesuai untuk cadangan menyeluruh, tetapi mengejutkan bila yang diharapkan hanya satu basis data. Folder hasilnya juga memakan ruang jauh lebih besar. Perbaikannya adalah menuliskan --db untuk cadangan terarah, atau menjalankan mongodump tanpa opsi itu hanya ketika seluruh basis data pada server memang hendak dicadangkan.
Kesalahan kedua adalah menyimpan cadangan pada mesin yang sama dengan server. Bila penyimpanannya rusak bersama server, cadangan itu hilang pada saat paling dibutuhkan. Perbaikannya adalah menyalin folder cadangan ke penyimpanan terpisah segera setelah diambil, lalu mengujinya sesekali dengan mongorestore ke basis data percobaan.
Kesalahan ketiga terkait konsistensi. Server yang terus menerima tulisan selama mongodump berjalan menghasilkan cadangan yang setiap koleksinya diambil pada waktu yang sedikit berbeda. Pada replica set, opsi --oplog membuat mongodump mencatat operasi yang berlangsung selama pencadangan, sehingga pemulihan dapat dibuat konsisten pada satu titik waktu dengan --oplogReplay.
Ringkasan#
- mongodump menyalin koleksi menjadi berkas
.bsonbeserta.metadata.jsonper koleksi, dan opsi--dbserta--outmengatur sumber dan tujuannya. - mongorestore menulis kembali folder cadangan, dan opsi
--dropmenggantikan isi koleksi tujuan agar hasil pemulihan persis sama dengan cadangan. - Atlas menyediakan cloud backup berbasis snapshot dan pemulihan titik waktu, sedangkan mongodump tetap dapat diarahkan ke Atlas melalui
--uri. - Cadangan disimpan pada penyimpanan terpisah dari server dan diuji pemulihannya secara berkala agar benar-benar dapat diandalkan.
Referensi#
- mongodump — MongoDB Database Tools
— Dokumentasi opsi mongodump, termasuk
--db,--out, dan--oplog. - mongorestore — MongoDB Database Tools
— Dokumentasi opsi pemulihan, termasuk
--dropdan--db. - Backup Methods — MongoDB Manual — Ringkasan metode cadangan yang disediakan MongoDB.
- Back Up a Cluster — Atlas — Fitur cloud backup dan pengaturan snapshot pada Atlas.