全部产品
Search
文档中心

ApsaraDB for MongoDB:Pulihkan data instance ke database MongoDB yang dikelola sendiri menggunakan cadangan fisik

更新时间:Jul 02, 2025

Topik ini menjelaskan cara memulihkan data dari instance ApsaraDB for MongoDB ke database MongoDB mandiri dalam mode standalone atau replika set menggunakan file cadangan fisik.

Prasyarat

  • Instance harus merupakan instance replika set.

  • Instance menggunakan disk lokal untuk menyimpan data.

  • Fitur Transparent Data Encryption (TDE) dinonaktifkan untuk instance tersebut. Untuk informasi lebih lanjut, lihat Konfigurasikan TDE untuk sebuah instance.

  • Mesin penyimpanan instance adalah WiredTiger atau RocksDB. Jika mesin penyimpanan instance adalah TerarkDB, Anda dapat memulihkan data instance ke database mandiri menggunakan cadangan logis. Untuk informasi lebih lanjut, lihat Pulihkan data instance ke database MongoDB mandiri menggunakan cadangan logis.

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

    • Jika mesin penyimpanan instance adalah RocksDB, Anda harus mengkompilasi dan menginstal aplikasi MongoDB yang dilengkapi dengan mesin penyimpanan RocksDB.

Persyaratan versi database

Versi instance harus sesuai dengan versi database MongoDB mandiri. Tabel berikut mencantumkan pemetaan antara instance dan database MongoDB mandiri.

Instance ApsaraDB for MongoDB

Database MongoDB yang dikelola sendiri

MongoDB 3.2

MongoDB 3.2 atau 3.4

MongoDB 3.4

MongoDB 3.4

MongoDB 4.0

MongoDB 4.0

MongoDB 4.2

MongoDB 4.2

Format file cadangan fisik

Format file cadangan fisik

Ekstensi nama file

Deskripsi

TAR

.tar.gz

Instance ApsaraDB for MongoDB yang dibuat sebelum 26 Maret 2019 memiliki file cadangan fisik dalam format .tar.

xbstream

_qp.xb

Instance ApsaraDB for MongoDB yang dibuat pada atau setelah 26 Maret 2019 memiliki file cadangan fisik dalam format .xbstream.

Catatan

Format .xbstream hanya tersedia untuk Linux. Format .xbstream tidak tersedia untuk Windows karena Windows tidak mendukung alat Percona XtraBackup yang digunakan untuk mendekompresi file dalam format .xbstream.

Lingkungan

  • Prosedur berikut menggunakan instance Elastic Compute Service (ECS) yang dibuat dari gambar Ubuntu 16.04 64-bit. Untuk informasi lebih lanjut tentang cara membuat instance ECS, lihat Buat instance menggunakan wizard.

  • MongoDB versi yang diperlukan telah diinstal pada instance ECS. Untuk informasi lebih lanjut tentang cara menginstal MongoDB, lihat Tambahkan Driver MongoDB.

  • Variabel lingkungan dikonfigurasi untuk database MongoDB mandiri pada instance ECS. Saat Anda menjalankan perintah, Anda tidak perlu memasukkan jalur file eksekusi lagi. Untuk informasi lebih lanjut, lihat Langkah 1: Konfigurasikan variabel lingkungan.

  • Direktori /test/mongo/data dari instance ECS digunakan untuk instance replika set.

  • Direktori /test/mongo/data1 dan /test/mongo/data2 dari instance ECS digunakan untuk database MongoDB mandiri dalam node replika set.

Langkah 1: Konfigurasikan variabel lingkungan

Konfigurasikan variabel lingkungan untuk database MongoDB mandiri agar Anda tidak perlu memasukkan jalur file eksekusi saat menjalankan perintah. Sebelum melakukan langkah ini, pastikan bahwa MongoDB telah diinstal. Untuk informasi lebih lanjut, kunjungi Instal MongoDB.

Jika variabel lingkungan telah dikonfigurasi untuk MongoDB, lewati langkah ini dan lakukan operasi di Langkah 2. Untuk informasi lebih lanjut, lihat Langkah 2: Unduh dan dekompresi file cadangan fisik.

  1. Jalankan perintah berikut untuk membuka file profile di Linux:

    sudo vi /etc/profile
  2. Tekan tombol i untuk masuk ke mode edit. Kemudian, masukkan kode berikut di baris terakhir:

    export PATH=$PATH:/<Jalur server MongoDB>/bin
    Catatan

    /test/mongo/bin digunakan sebagai jalur server MongoDB dalam contoh ini. Gunakan jalur aktual saat Anda mengonfigurasi variabel lingkungan.

    Contoh:

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

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

  4. Jalankan perintah berikut untuk membuat variabel lingkungan yang dikonfigurasi berlaku:

    source /etc/profile

Langkah 2: Unduh dan dekompresi file cadangan fisik

  1. Jalankan perintah berikut untuk mengunduh data cadangan fisik instance di konsol ApsaraDB for MongoDB. Untuk informasi lebih lanjut, lihat Unduh data cadangan fisik instance replika set.

    wget -c '<URL unduhan eksternal file cadangan data>' -O <Nama kustom file cadangan data yang diunduh>.<Ekstensi nama file>
    Catatan

    Pastikan ekstensi nama file adalah .tar.gz atau _qp.xb.

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

    mkdir -p /test/mongo/data && mv <Nama file cadangan fisik.Ekstensi> /test/mongo/data
  3. Dekompresi file cadangan fisik.

    • Jika nama file cadangan fisik berisi ekstensi .tar.gz, seperti hins20190412.tar.gz, jalankan perintah berikut untuk mendekompresi file:

      cd /test/mongo/data/ && tar xzvf hins20190412.tar.gz 
    • Jika nama file cadangan fisik berisi ekstensi _qp.xb, seperti hins20190412_qp.xb, lakukan operasi berikut untuk mendekompresi file:

      1. Instal alat Percona XtraBackup dan qpress. Untuk informasi lebih lanjut, kunjungi Menginstal Percona XtraBackup di Debian dan Ubuntu.

      2. Dekompresi file cadangan fisik. Dalam contoh ini, nama file adalah hins20190412_qp.xb.

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

Langkah 3: Pulihkan data ke database MongoDB yang dikelola sendiri dalam mode standalone

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

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

    Anda dapat memilih template konfigurasi berdasarkan mesin penyimpanan instance, dan salin template konfigurasi yang dipilih ke file konfigurasi mongod.conf.

    Catatan

    Dalam file ini, aktifkan startup standalone dan otorisasi.

    • 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 opsi directoryPerDB diaktifkan. Oleh karena itu, opsi directoryPerDB disetel ke true dalam konfigurasi di atas.

    • 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, dan masukkan :wq untuk menyimpan file dan keluar.

  4. Gunakan file konfigurasi mongod.conf untuk memulai MongoDB.

    mongod -f /test/mongo/mongod.conf
  5. Setelah Anda memulai MongoDB, jalankan perintah berikut untuk masuk ke database MongoDB mandiri dan masuk ke shell mongo:

    mongo --host 127.0.0.1 -u <username> -p <password> --authenticationDatabase admin
    • <username>: akun yang digunakan untuk masuk ke database MongoDB mandiri. Nilai defaultnya adalah root.

    • <password>: kata sandi yang digunakan untuk masuk ke database MongoDB mandiri.

      Catatan

      Jika kata sandi berisi karakter khusus, Anda harus menutup kata sandi dalam tanda kutip tunggal (' '). Contoh: 'test123!@#' Jika tidak, Anda mungkin gagal masuk ke database.

  6. Jalankan perintah show dbs di shell mongo untuk menanyakan semua database yang tersedia di server MongoDB. Dengan cara ini, Anda dapat memeriksa apakah pemulihan berhasil.

  7. Jalankan perintah exit di shell mongo untuk keluar dari shell mongo.

Setelah Anda menyelesaikan langkah-langkah di atas, Anda dapat memulai database MongoDB dalam mode standalone. Untuk memulai database dalam mode replika set, lakukan operasi di Langkah 4.

Langkah 4: Mulai database MongoDB yang dikelola sendiri dalam mode replika set

Secara default, file cadangan fisik instance berisi konfigurasi replika set-nya. Untuk memulai database MongoDB mandiri dalam mode replika set, Anda harus menghapus konfigurasi dari cadangan fisik. Untuk memulai database MongoDB mandiri dalam mode replika set, lakukan operasi berikut:

  1. Di baris perintah, masuk ke database sebagai pengguna test menggunakan shell mongo:

    mongo --host 127.0.0.1 -u test -p <Kata sandi akun test> --authenticationDatabase admin
    Catatan

    Jika kata sandi berisi karakter khusus, Anda harus menutup kata sandi dalam tanda kutip tunggal (' '). Contoh: 'test123!@#' Jika tidak, Anda mungkin gagal masuk ke database.

  2. Setelah Anda masuk ke database, jalankan perintah dalam contoh kode untuk melakukan operasi berikut:

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

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

    3. Beralih kembali ke pengguna test dan hapus pengguna sementara dan izin sementara.

      Catatan

      Ganti <Kata sandi akun test> dalam kode berikut dengan kata sandi akun test Anda.

    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','<Kata sandi akun test>')
    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 pada replika set.

    Untuk memulai database dalam mode replika set, Anda harus membuat file kunci untuk semua node replika set untuk saling mengotentikasi.

    1. Jalankan perintah berikut untuk membuat folder keyFile di direktori mongo sebagai direktori file autentikasi dan buat file kunci di direktori file autentikasi:

      mkdir -p /test/mongo/keyFile && touch /test/mongo/keyFile/mongodb.key
    2. Jalankan perintah vi /test/mongo/keyFile/mongodb.key untuk membuka file mongodb.key. Kemudian, tekan tombol i untuk masuk ke mode edit. Contoh:

      MongoDB Encrypting File
      Catatan

      Kunci yang digunakan untuk mengenkripsi data memiliki batasan berikut:

      • Kunci harus memiliki panjang 6 hingga 1.024 karakter.

      • Kunci hanya dapat berisi karakter yang di-enkode Base64.

      • Kunci tidak boleh berisi tanda sama dengan (=).

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

    4. Di baris perintah, jalankan perintah berikut untuk mengubah izin pada file autentikasi menjadi 400. Dengan cara ini, hanya pemilik file yang dapat melihat isi file.

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

    File autentikasi ini berlaku untuk semua node replika set.

  5. Lakukan operasi berikut untuk menyiapkan dua node kosong untuk replika set:

    1. Jalankan perintah berikut untuk membuat dua salinan file mongod.conf. Kedua salinan digunakan sebagai file konfigurasi 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 dengan melakukan operasi berikut:

    • Jalankan perintah vi /test/mongo/mongod.conf untuk membuka file konfigurasi Node 1 dan ubah file berdasarkan konten berikut. Kemudian, simpan dan keluar dari file konfigurasi.

      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 perintah vi /test/mongo/mongod1.conf untuk membuka file konfigurasi Node 2 dan ubah file berdasarkan konten berikut. Kemudian, simpan dan keluar dari file konfigurasi.

      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 perintah vi /test/mongo/mongod2.conf untuk membuka file konfigurasi Node 3 dan ubah file berdasarkan konten berikut. Kemudian, simpan dan keluar dari file konfigurasi.

      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"

    Anda dapat mengubah parameter berikut dalam file konfigurasi:

    • path di systemLog.path: jalur untuk menyimpan file log MongoDB di node saat ini.

    • dbpath: jalur untuk menyimpan file data MongoDB di node saat ini.

    • pidFilePath: jalur untuk menyimpan file ID Proses (PID) MongoDB di node saat ini.

    • keyFile: jalur untuk menyimpan file autentikasi untuk replika set. Semua node dalam replika set harus menggunakan file autentikasi yang sama.

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

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

    • replication: konfigurasi replika set.

    • replSetName: nama replika set.

  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 Anda memulai ketiga node, gunakan akun test untuk masuk ke database MongoDB mandiri.

    mongo --host 127.0.0.1 -u test -p <Kata sandi akun test> --authenticationDatabase admin
    Catatan

    Jika kata sandi berisi karakter khusus, Anda harus menutup kata sandi dalam tanda kutip tunggal (' '). Contoh: 'test123!@#' Jika tidak, Anda mungkin gagal masuk ke database.

  9. Di shell mongo, jalankan perintah berikut untuk menambahkan node yang Anda buat dalam operasi sebelumnya ke replika set dan inisialisasi replika set:

    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

    Perintah rs.initiate() digunakan dalam langkah ini. Untuk informasi lebih lanjut tentang perintah tersebut, kunjungi rs.initiate().

    Setelah perintah dijalankan, data disinkronkan antara dua node tambahan dan node utama. Waktu yang dibutuhkan dalam proses ini bervariasi tergantung pada ukuran file cadangan. Setelah data disinkronkan, database MongoDB mandiri dimulai dalam mode replika set.

  10. Lakukan operasi berikut untuk memeriksa apakah database MongoDB mandiri dalam mode replika set telah dimulai:

    1. Jalankan perintah exit untuk keluar dari shell mongo.

    2. Jalankan perintah berikut untuk masuk kembali ke database MongoDB mandiri:

      mongo -u <username> -p <password> --authenticationDatabase admin
      • <username>: akun yang digunakan untuk masuk ke database MongoDB mandiri. Nilai defaultnya adalah root.

      • <password>: kata sandi yang digunakan untuk masuk ke database MongoDB mandiri.

        Catatan

        Jika kata sandi berisi karakter khusus, Anda harus menutup kata sandi dalam tanda kutip tunggal (' '). Contoh: 'test123!@#' Jika tidak, Anda mungkin gagal masuk ke database.

    3. Periksa apakah database MongoDB mandiri dimulai dalam mode replika set. Jika <Nama replika set>:PRIMARY> ditampilkan di sisi kiri baris perintah di shell mongo, database MongoDB mandiri dimulai dalam mode replika set.

Tanya Jawab Umum

Mengapa terjadi kesalahan saat saya menggunakan file konfigurasi mongod.conf tertentu untuk memulai database MongoDB mandiri?

Penyebab umum termasuk:

  • Anda mungkin telah memulai database MongoDB mandiri sebelum menentukan file konfigurasi mongod.conf. Akibatnya, file storage.bson secara otomatis dibuat di direktori data. Dalam hal ini, hapus file storage.bson dan tentukan file konfigurasi mongod.conf untuk memulai database MongoDB mandiri.

  • Proses mongod lain mungkin sedang berjalan di sistem saat ini. Dalam hal ini, jalankan perintah ps -e | grep mongod untuk menanyakan PID dan jalankan perintah kill <PID> untuk menghentikan proses. Kemudian, tentukan file konfigurasi mongod.conf untuk memulai database MongoDB mandiri.

  • Jalur log systemLog.path yang tidak valid mungkin ditentukan dalam file konfigurasi mongod.conf. Dalam hal ini, periksa apakah jalur yang ditentukan ada dan apakah file log memiliki nama yang ditentukan. Contoh: path: /<Jalur file log>/<Nama file log>.log.

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

Anda mungkin gagal mengubah izin pada file autentikasi keyFile yang ditentukan menjadi 600. Di baris perintah, jalankan perintah sudo chmod 600 <Jalur keyFile> untuk memodifikasi izin.

Mengapa performa sistem menjadi rendah setelah saya memulai database MongoDB mandiri dalam mode replika set?

Setelah Anda memulai database MongoDB mandiri dalam mode replika set, sistem secara otomatis mulai menyinkronkan data dari node utama ke node lainnya. Proses ini dapat mempengaruhi performa sistem. Performa sistem kembali normal setelah data disinkronkan.