全部产品
Search
文档中心

ApsaraDB for MongoDB:Pulihkan data dari cadangan disk lokal yang diunduh ke database MongoDB yang dikelola sendiri

更新时间:Nov 10, 2025

Topik ini menjelaskan cara memulihkan data dari cadangan yang diunduh dari instans MongoDB dengan disk lokal ke database MongoDB yang dikelola sendiri, baik yang dikonfigurasi sebagai node tunggal maupun set replika.

Memulihkan data dari cadangan logis disk lokal

Catatan

  • MongoDB terus diperbarui, dan versi lama mongorestore mungkin tidak kompatibel dengan versi baru MongoDB. Pilih versi mongorestore yang sesuai dengan versi MongoDB Anda. Untuk informasi lebih lanjut, lihat mongorestore.

  • Jika database yang dikelola sendiri adalah kluster sharded, atur parameter <hostname> dalam perintah impor data ke alamat komponen Mongos di database yang dikelola sendiri.

  • Jika database yang dikelola sendiri adalah kluster sharded, tambahkan --nsExclude="config.*" ke perintah impor data. Jika tidak, kesalahan mungkin terjadi selama pemulihan data.

  • Saat memulihkan data dari instans kluster sharded ke database yang dikelola sendiri, unduh data cadangan dari setiap komponen shard dan impor data ke dalam database yang dikelola sendiri. Jika instans kluster sharded berisi dokumen yatim, data kotor mungkin diperkenalkan ke dalam database yang dikelola sendiri. Saat memulihkan cadangan dari beberapa shard ke kluster sharded yang sama, gunakan parameter drop hanya saat memulihkan cadangan dari shard pertama.

Persiapan

  • Unduh dan instal versi MongoDB pada klien Anda (server lokal atau Instance ECS) yang sesuai dengan instans sumber ApsaraDB for MongoDB. Untuk informasi lebih lanjut, lihat Instal MongoDB.

  • Pastikan Anda telah mengunduh file cadangan logis. Jika belum melakukannya, lihat Unduh File Cadangan.

Prosedur

  1. Salin file cadangan yang diunduh ke klien tempat database MongoDB yang dikelola sendiri Anda berada. Pastikan alat mongorestore telah diinstal pada klien ini.

  2. Jalankan perintah berikut untuk mengimpor data dari file cadangan ke database MongoDB yang dikelola sendiri Anda.

    mongorestore -h <hostname> --port <server port> -u <username> -p <password> --drop --gzip --archive=<backupfile> -vvvv --stopOnError

    Ubah parameter berikut:

    • <hostname>: Alamat server dari database MongoDB yang dikelola sendiri. Untuk server lokal, masukkan 127.0.0.1.

      Jika database yang dikelola sendiri adalah kluster sharded, atur parameter ini ke alamat komponen Mongos di database yang dikelola sendiri.

    • <server port>: Port dari database MongoDB yang dikelola sendiri.

    • <username>: Nama pengguna yang digunakan untuk masuk ke database MongoDB yang dikelola sendiri. Pastikan pengguna memiliki izin pada semua database. Disarankan menggunakan akun root.

    • <password>: Kata sandi untuk akun database.

    • <backupfile>: Nama file cadangan logis yang diunduh.

    Parameter berikut tidak perlu diubah:

    • --drop: Menghapus koleksi sebelum memulihkan file cadangan.

      Catatan

      Saat memulihkan cadangan dari beberapa shard ke kluster sharded yang sama, gunakan parameter ini hanya saat memulihkan cadangan dari shard pertama.

    • --gzip: Menentukan bahwa data dalam file cadangan dikompresi dalam format gzip dan harus diekstraksi.

      Catatan

      Parameter ini didukung sejak MongoDB 3.1.4. Untuk informasi lebih lanjut, lihat mongo-tools.

    • -vvvv: Tingkat detail dalam keluaran. Semakin banyak karakter 'v', semakin rinci keluarannya.

    • --stopOnError: Menghentikan proses impor jika terjadi kesalahan.

    • --nsExclude: Mengecualikan koleksi yang cocok dari pemulihan. Sebagai contoh, --nsExclude="config.*".

    Contoh:

    mongorestore -h 127.0.0.1 --port 27017 -u root -p ******** --drop --gzip --archive=hins1111_data_20190710.ar -vvvv --stopOnError

Memulihkan data dari cadangan fisik disk lokal

Prasyarat

  • Instans tersebut merupakan instans set replika.

  • Fitur TDE dinonaktifkan untuk instans tersebut.

  • Mesin penyimpanan instans adalah WiredTiger atau RocksDB. Jika mesin penyimpanan instans adalah TerarkDB, lihat memulihkan data dari cadangan disk.

    Catatan
    • Anda dapat melihat mesin penyimpanan instans pada halaman Basic Information di Konsol ApsaraDB for MongoDB.

    • Jika mesin penyimpanan instans adalah RocksDB, Anda harus mengompilasi dan menginstal aplikasi MongoDB yang dibangun dengan mesin penyimpanan RocksDB.

Persyaratan versi database

Versi instans ApsaraDB for MongoDB harus kompatibel dengan versi database MongoDB yang dikelola sendiri. Tabel berikut menunjukkan pemetaan versi yang sesuai.

Instans MongoDB

Database MongoDB yang dikelola sendiri

Versi 3.2

Versi 3.2 atau 3.4

Versi 3.4

Versi 3.4

Versi 4.0

Versi 4.0

Versi 4.2

Versi 4.2

Format file cadangan fisik

Format file cadangan fisik

Ekstensi file

Deskripsi

format tar

.tar.gz

Untuk instans yang dibuat sebelum 26 Maret 2019, file cadangan fisik dalam format tar.

format xbstream

_qp.xb

Untuk instans yang dibuat pada atau setelah 26 Maret 2019, file cadangan fisik dalam format xbstream.

Catatan

Karena Windows tidak mendukung alat percona-xtrabackup yang diperlukan untuk mengekstrak file ini, format xbstream hanya dapat diekstrak di Linux.

Lingkungan

  • Prosedur berikut menggunakan Instance ECS Alibaba Cloud yang menjalankan citra Ubuntu 16.04 64-bit. Untuk informasi lebih lanjut tentang cara membuat Instance ECS, lihat Buat Instance ECS.

  • Versi MongoDB yang diperlukan telah diinstal pada Instance ECS. Untuk informasi lebih lanjut, lihat dokumentasi resmi MongoDB.

  • Variabel lingkungan untuk MongoDB telah dikonfigurasi pada Instance ECS, memungkinkan Anda menjalankan perintah tanpa perlu memasukkan jalur lengkap dari file yang dapat dieksekusi.

  • Direktori /test/mongo/data digunakan sebagai direktori database untuk pemulihan fisik MongoDB.

  • Direktori /test/mongo/data1 dan /test/mongo/data2 digunakan sebagai direktori database untuk node set replika.

Langkah 1: Konfigurasikan variabel lingkungan

Konfigurasikan variabel lingkungan untuk MongoDB di lingkungan database yang dikelola sendiri. Ini memungkinkan Anda menjalankan perintah tanpa perlu memasukkan jalur lengkap. Sebelum melanjutkan, pastikan Anda telah menginstal MongoDB.

Jika Anda sudah mengonfigurasi variabel lingkungan untuk MongoDB, lewati langkah ini dan lanjutkan ke Langkah 2: Unduh dan ekstrak file cadangan fisik.

  1. Jalankan perintah berikut untuk membuka file variabel lingkungan profile di Linux.

    sudo vi /etc/profile
  2. Tekan tombol i untuk masuk ke mode edit. Kemudian, tambahkan konten berikut pada baris terakhir:

    export PATH=$PATH:/<Path to the MongoDB server>/bin
    Catatan

    Pada contoh ini, jalur ke server MongoDB adalah /test/mongo/bin. Sesuaikan jalur tersebut sesuai dengan kebutuhan Anda.

    Contoh:

    export PATH=$PATH:/test/mongo/bin

  3. Tekan tombol Esc untuk keluar dari mode edit. Kemudian, masukkan :wq untuk menyimpan file dan keluar.

  4. Jalankan perintah berikut untuk menerapkan perubahan pada file variabel lingkungan:

    source /etc/profile

Langkah 2: Unduh dan ekstrak file cadangan fisik

  1. Unduh file cadangan fisik dari instans MongoDB. Anda dapat menjalankan perintah berikut untuk mengunduh file tersebut.

    wget -c '<External download URL of the data backup file>' -O <Custom_file_name>.<Extension>

    Contoh:

    wget -c 'http://rdsbak-hz-v3.oss-cn-hangzhou-internal.aliyuncs.com/custins5475****/hins1907****_data_20210906103710_qp.xb?Expires=......' -O backupfile._qp.xb
    Catatan
    • Berdasarkan jenis file yang diunduh, pastikan ekstensi file adalah .tar.gz atau _qp.xb.

    • Tutup URL unduhan dalam tanda kutip tunggal (') untuk memastikan URL diparsing dengan benar.

  2. Jalankan perintah berikut untuk membuat direktori data di direktori /test/mongo/ dan pindahkan file cadangan fisik yang diunduh ke direktori /test/mongo/data/.

    mkdir -p /test/mongo/data && mv <Physical_backup_file_name.Extension> /test/mongo/data
  3. Ekstrak file cadangan fisik.

    • Jika file cadangan fisik yang diunduh memiliki ekstensi .tar.gz, seperti hins20190412.tar.gz, gunakan metode berikut untuk mengekstraknya.

      cd /test/mongo/data/ && tar xzvf hins20190412.tar.gz 
    • Jika file cadangan fisik yang diunduh memiliki ekstensi _qp.xb, seperti hins20190412_qp.xb, gunakan metode berikut untuk mengekstraknya.

      1. Instal alat Percona XtraBackup dan paket qpress. Untuk informasi lebih lanjut, lihat langkah-langkah instalasi di situs web resmi Percona XtraBackup.

      2. Ekstrak file cadangan fisik. Sebagai contoh, jika file cadangan database bernama hins20190412_qp.xb:

        # Pergi ke direktori tempat file berada.
        cd /test/mongo/data/
        # Bongkar file.
        cat hins20190412_qp.xb | xbstream -x -v
        # Ekstrak file cadangan fisik.
        innobackupex --decompress --remove-original /test/mongo/data

Langkah 3: Pulihkan data dari cadangan fisik dalam mode node tunggal

  1. Jalankan perintah berikut untuk membuat file konfigurasi bernama mongod.conf di folder /test/mongo.

    touch /test/mongo/mongod.conf
  2. Di baris perintah, jalankan vi /test/mongo/mongod.conf untuk membuka file mongod.conf. Tekan tombol i untuk masuk ke mode edit.

    Pilih templat konfigurasi startup berdasarkan mesin penyimpanan instans ApsaraDB for MongoDB dan salin ke file mongod.conf.

    Catatan

    File konfigurasi ini menyetel mode startup ke mode node tunggal dan mengaktifkan autentikasi.

    • Mesin Penyimpanan WiredTiger

      systemLog:
          destination: file
          path: /test/mongo/mongod.log
          logAppend: true
      security:
          authorization: enabled
      storage:
          dbPath: /test/mongo/data
          directoryPerDB: true
      net:
          port: 27017
          unixDomainSocket:
              enabled: false
      processManagement:
          fork: true
          pidFilePath: /test/mongo/mongod.pid
      Catatan

      Secara default, ApsaraDB for MongoDB menggunakan mesin penyimpanan WiredTiger dan mengaktifkan opsi directoryPerDB. Oleh karena itu, opsi ini ditentukan dalam konfigurasi.

    • Mesin Penyimpanan RocksDB

      systemLog:
          destination: file
          path: /test/mongo/logs/mongod.log
          logAppend: true
      security:
          authorization: enabled​
      storage:
          dbPath: /test/mongo/data
              engine: rocksdb
      net:
          port: 27017
          unixDomainSocket:
              enabled: false
      processManagement:
          fork: true
          pidFilePath: /test/mongo/mongod.pid
  3. Tekan tombol Esc untuk keluar dari mode edit. Kemudian, masukkan :wq untuk menyimpan file dan keluar.

  4. Mulai MongoDB menggunakan file konfigurasi mongod.conf baru.

    mongod -f /test/mongo/mongod.conf
  5. Setelah startup selesai, jalankan perintah berikut untuk masuk ke database MongoDB dan akses shell mongo.

    mongo --host 127.0.0.1 -u <username> -p <password> --authenticationDatabase admin
    • <username>: Akun database untuk instans MongoDB. Defaultnya adalah root.

    • <password>: Kata sandi untuk akun database.

      Catatan

      Jika kata sandi Anda mengandung karakter khusus, tutup kata sandi dalam tanda kutip tunggal ('). Contohnya: 'test123!@#'. Jika tidak, login mungkin gagal.

  6. Di shell mongo, jalankan show dbs untuk menampilkan semua database di instans MongoDB lokal dan verifikasi bahwa pemulihan berhasil.

  7. Pemulihan sekarang selesai. Anda dapat menjalankan perintah exit di shell mongo untuk keluar.

Setelah menyelesaikan langkah-langkah ini, database MongoDB akan berjalan dalam mode node tunggal. Untuk memulai database dalam mode set replika, lanjutkan ke Langkah 4.

Langkah 4: Mulai database MongoDB dalam mode set replika

Secara default, cadangan fisik dari instans ApsaraDB for MongoDB mencakup konfigurasi set replika dari instans asli. Anda perlu menghapus konfigurasi ini untuk memulai database dalam mode set replika. Ikuti langkah-langkah berikut:

  1. Gunakan shell mongo di baris perintah untuk masuk ke database MongoDB sebagai pengguna uji.

    mongo --host 127.0.0.1 -u test -p <password_of_the_test_user> --authenticationDatabase admin
    Catatan

    Jika kata sandi Anda mengandung karakter khusus, gunakan tanda kutip tunggal (') untuk melingkupinya. Contoh: 'test123!@#'. Jika tidak, login mungkin gagal.

  2. Setelah berhasil masuk, jalankan perintah dalam blok kode berikut untuk melakukan tindakan berikut:

    1. Buat pengguna sementara di database admin dan berikan izin baca-tulis sementara pada database lokal.

    2. Beralih ke pengguna sementara dan hapus konfigurasi set replika asli dari database lokal.

    3. Kembalikan ke pengguna uji dan hapus pengguna sementara beserta izinnya.

      Catatan

      Ganti <password_of_the_test_user> dalam kode berikut dengan kata sandi pengguna uji sebelum menjalankan perintah.

    use admin
    db.runCommand({
        createRole: "tmprole",
        roles: [
            {
                role: "test",
                db: "admin"
            }
        ],
        privileges: [
            {
                resource: {
                    db: 'local',
                    collection: 'system.replset'
                },
                actions: [
                    'remove'
                ]
            }
        ]
    })
    db.runCommand({
        createUser: "tmpuser",
        pwd: "tmppwd",
        roles: [
            'tmprole'
        ]
    })
    db.auth('tmpuser','tmppwd')
    use local
    db.system.replset.remove({})
    use admin
    db.auth('test','<password_of_the_test_user>')
    db.dropRole('tmprole')
    db.dropUser('tmpuser')
  3. Jalankan perintah berikut untuk mematikan layanan MongoDB dan keluar dari shell mongo.

    use admin
    db.shutdownServer()
    exit
  4. Buat file autentikasi set replika.

    Untuk memulai MongoDB dalam mode set replika, Anda harus membuat file kunci untuk autentikasi antar node set replika.

    1. Jalankan perintah berikut untuk membuat folder keyFile di direktori mongo. Folder ini akan berfungsi sebagai direktori untuk file autentikasi. Kemudian, buat file kunci di direktori tersebut.

      mkdir -p /test/mongo/keyFile && touch /test/mongo/keyFile/mongodb.key
    2. Jalankan vi /test/mongo/keyFile/mongodb.key untuk membuka file mongodb.key. Tekan tombol i untuk masuk ke mode edit dan masukkan konten enkripsi. Sebagai contoh:

      MongoDB Encrypting File
      Catatan

      Konten enkripsi harus memenuhi batasan berikut:

      • Panjangnya harus antara 6 dan 1.024 karakter.

      • Hanya dapat berisi karakter dari set karakter Base64.

      • Tidak boleh mengandung tanda sama dengan (=).

    3. Tekan tombol Esc untuk keluar dari mode edit. Kemudian, masukkan :wq untuk menyimpan dan keluar dari file.

    4. Di baris perintah, jalankan perintah berikut untuk mengubah izin file autentikasi menjadi 400. Ini memastikan bahwa isi file hanya terlihat oleh pemilik file.

      sudo chmod 400 /test/mongo/keyFile/mongodb.key
    Catatan

    File autentikasi ini diterapkan ke semua node set replika.

  5. Siapkan dua node kosong untuk set replika.

    1. Jalankan perintah berikut untuk menyalin file mongod.conf dua kali. Salinan ini akan berfungsi sebagai file konfigurasi startup untuk dua node lainnya.

      cp /test/mongo/mongod.conf /test/mongo/mongod1.conf && cp /test/mongo/mongod.conf /test/mongo/mongod2.conf
    2. Jalankan perintah berikut untuk membuat direktori data untuk dua node lainnya.

      mkdir -p /test/mongo/data1 && mkdir -p /test/mongo/data2
  6. Ubah file konfigurasi setiap node sesuai dengan langkah-langkah berikut:

    • Jalankan vi /test/mongo/mongod.conf untuk membuka file konfigurasi Node 1. Ubah file untuk menyertakan konten berikut, lalu simpan dan keluar dari file.

      systemLog:
          destination: file
          path: /test/mongo/mongod.log
          logAppend: true
      security:
          authorization: enabled
          keyFile: /test/mongo/keyFile/mongodb.key
      storage:
          dbPath: /test/mongo/data
          directoryPerDB: true
      net:
          bindIp: 127.0.0.1
          port: 27017
          unixDomainSocket:
              enabled: false
      processManagement:
          fork: true
          pidFilePath: /test/mongo/mongod.pid
      replication:
          replSetName: "rs0"
    • Jalankan vi /test/mongo/mongod1.conf untuk membuka file konfigurasi Node 2. Ubah file untuk menyertakan konten berikut, lalu simpan dan keluar dari file.

      systemLog:
          destination: file
          path: /test/mongo/mongod1.log
          logAppend: true
      security:
          authorization: enabled
          keyFile: /test/mongo/keyFile/mongodb.key
      storage:
          dbPath: /test/mongo/data1
          directoryPerDB: true
      net:
          bindIp: 127.0.0.1
          port: 27018
          unixDomainSocket:
              enabled: false
      processManagement:
          fork: true
          pidFilePath: /test/mongo/mongod1.pid
      replication:
          replSetName: "rs0"
    • Jalankan vi /test/mongo/mongod2.conf untuk membuka file konfigurasi Node 3. Ubah file untuk menyertakan konten berikut, lalu simpan dan keluar dari file. systemLog: destination: file path: /test/mongo/mongod2.log logAppend: true security: authorization: enabled keyFile: /test/mongo/keyFile/mongodb.key storage: dbPath: /test/mongo/data2 directoryPerDB: true net: bindIp: 127.0.0.1 port: 27019 unixDomainSocket: enabled: false processManagement: fork: true pidFilePath: /test/mongo/mongod2.pid replication: replSetName: "rs0"

      systemLog:
          destination: file
          path: /test/mongo/mongod2.log
          logAppend: true
      security:
          authorization: enabled
          keyFile: /test/mongo/keyFile/mongodb.key
      storage:
          dbPath: /test/mongo/data2
          directoryPerDB: true
      net:
          bindIp: 127.0.0.1
          port: 27019
          unixDomainSocket:
              enabled: false
      processManagement:
          fork: true
          pidFilePath: /test/mongo/mongod2.pid
      replication:
          replSetName: "rs0"

    Berikut adalah penjelasan parameter utama:

    • path di bawah systemLog: Jalur file log MongoDB untuk node saat ini.

    • dbpath: Jalur file data MongoDB untuk node saat ini.

    • pidFilePath: Jalur file PID MongoDB (file yang mencatat ID proses) untuk node saat ini.

    • keyFile: Jalur file autentikasi set replika. Semua node harus menggunakan file autentikasi yang sama.

    • bindIp: Alamat IP node saat ini. Jika set replika diterapkan pada server yang sama, semua node dapat menggunakan alamat IP yang sama.

    • port: Nomor port node saat ini. Jika set replika diterapkan pada server yang sama, semua node harus menggunakan nomor port yang berbeda.

    • replication: Konfigurasi set replika.

    • replSetName: Nama set replika.

  7. Jalankan perintah berikut untuk memulai ketiga node.

    mongod -f /test/mongo/mongod.conf && mongod -f /test/mongo/mongod1.conf && mongod -f /test/mongo/mongod2.conf
  8. Setelah startup selesai, masuk ke database MongoDB menggunakan akun uji.

    mongo --host 127.0.0.1 -u test -p <password_of_the_test_account> --authenticationDatabase admin
    Catatan

    Jika kata sandi Anda mengandung karakter khusus, gunakan tanda kutip tunggal (') untuk melingkupinya. Contoh: 'test123!@#'. Jika tidak, login mungkin gagal.

  9. Di shell mongo, jalankan perintah berikut untuk menambahkan node anggota set replika yang dibuat di langkah sebelumnya ke set replika dan inisialisasi set replika.

    rs.initiate( {
       _id : "rs0",
       version : 1,
       members: [
          { _id: 0, host: "127.0.0.1:27017" , priority : 1},
          { _id: 1, host: "127.0.0.1:27018" , priority : 0},
          { _id: 2, host: "127.0.0.1:27019" , priority : 0}
       ]
    })

    Contoh inisialisasi berhasil:初始化成功示例

    Catatan

    Langkah ini menggunakan perintah rs.initiate(). Untuk informasi lebih lanjut tentang perintah ini, lihat dokumentasi resmi MongoDB untuk rs.initiate().

    Setelah perintah berhasil dijalankan, dua node baru mulai menyinkronkan data dengan node utama. Waktu yang diperlukan untuk proses ini bervariasi berdasarkan ukuran file cadangan. Setelah sinkronisasi data selesai, startup dalam mode set replika selesai.

  10. Verifikasi bahwa startup berhasil.

    1. Jalankan exit untuk keluar dari shell mongo.

    2. Jalankan perintah berikut untuk masuk ke database MongoDB lagi.

      mongo -u <username> -p <password> --authenticationDatabase admin
      • <username>: Akun database untuk instans MongoDB. Defaultnya adalah root.

      • <password>: Kata sandi untuk akun database.

        Catatan

        Jika kata sandi Anda mengandung karakter khusus, gunakan tanda kutip tunggal (') untuk melingkupinya. Contoh: 'test123!@#'. Jika tidak, login mungkin gagal.

    3. Amati sisi kiri baris perintah shell mongo. Jika <Nama_set_replika>:PRIMARY> ditampilkan, startup dalam mode set replika berhasil.

FAQ

Mengapa kesalahan terjadi saat saya menggunakan mongod.conf file konfigurasi tertentu untuk memulai database yang dikelola sendiri?

Berikut adalah alasan umum:

  • Anda mungkin telah memulai database sebelum menentukan file konfigurasi mongod.conf, sehingga file storage.bson secara otomatis dibuat di direktori data. Untuk mengatasi masalah ini, pindahkan file tersebut dan mulai ulang database dengan menentukan file konfigurasi mongod.conf.

  • Proses mongod mungkin sudah berjalan di sistem. Anda dapat menemukan ID proses mongod dengan menjalankan perintah ps -e | grep mongod. Kemudian, hentikan proses mongod dengan menjalankan perintah kill <Process_ID> dan mulai ulang database dengan menentukan file konfigurasi mongod.conf.

  • Anda mungkin belum menentukan jalur log systemLog.path yang benar dalam file konfigurasi mongod.conf. Pastikan jalur yang ditentukan ada dan Anda telah menentukan nama file log. Contohnya: path: /<Log_file_path>/<Log_file_name>.log.

Mengapa kesalahan terjadi saat saya menggunakan mongod.conf file konfigurasi tertentu untuk memulai database dalam mode set replika?

Anda mungkin belum mengubah izin file autentikasi keyFile yang ditentukan menjadi 600. Di baris perintah, jalankan sudo chmod 600 <Path_to_keyFile> untuk memodifikasi izin dan coba lagi.

Mengapa sistem melambat setelah saya memulai database MongoDB dalam mode set replika?

Setelah startup selesai, sistem secara otomatis mulai menyinkronkan data dari node utama ke node lainnya. Anda harus menunggu sinkronisasi data selesai.

Bagaimana cara saya memulihkan data instans ke database yang dikelola sendiri jika arsitektur instans tidak memungkinkan saya mengunduh file cadangan?