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.
CatatanAnda 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.
Jalankan perintah berikut untuk membuka file
profiledi Linux:sudo vi /etc/profileTekan tombol
iuntuk masuk ke mode edit. Kemudian, masukkan kode berikut di baris terakhir:export PATH=$PATH:/<Jalur server MongoDB>/binCatatan/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/binTekan tombol Esc untuk keluar dari mode edit, dan masukkan
:wquntuk menyimpan file dan keluar.Jalankan perintah berikut untuk membuat variabel lingkungan yang dikonfigurasi berlaku:
source /etc/profile
Langkah 2: Unduh dan dekompresi file cadangan fisik
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>CatatanPastikan ekstensi nama file adalah
.tar.gzatau_qp.xb.Jalankan perintah berikut untuk membuat direktori bernama
datadi 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/dataDekompresi 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.gzJika nama file cadangan fisik berisi ekstensi _qp.xb, seperti hins20190412_qp.xb, lakukan operasi berikut untuk mendekompresi file:
Instal alat Percona XtraBackup dan qpress. Untuk informasi lebih lanjut, kunjungi Menginstal Percona XtraBackup di Debian dan Ubuntu.
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
Jalankan perintah berikut untuk membuat file konfigurasi bernama mongod.conf di direktori /test/mongo:
touch /test/mongo/mongod.confDi baris perintah, masukkan
vi /test/mongo/mongod.confuntuk membuka file mongod.conf. Kemudian, tekan tomboliuntuk masuk ke mode edit.Anda dapat memilih template konfigurasi berdasarkan mesin penyimpanan instance, dan salin template konfigurasi yang dipilih ke file konfigurasi mongod.conf.
CatatanDalam 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.pidCatatanSecara 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
Tekan tombol Esc untuk keluar dari mode edit, dan masukkan
:wquntuk menyimpan file dan keluar.Gunakan file konfigurasi mongod.conf untuk memulai MongoDB.
mongod -f /test/mongo/mongod.confSetelah 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.
CatatanJika kata sandi berisi karakter khusus, Anda harus menutup kata sandi dalam tanda kutip tunggal (' '). Contoh: 'test123!@#' Jika tidak, Anda mungkin gagal masuk ke database.
Jalankan perintah
show dbsdi shell mongo untuk menanyakan semua database yang tersedia di server MongoDB. Dengan cara ini, Anda dapat memeriksa apakah pemulihan berhasil.Jalankan perintah
exitdi 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:
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 adminCatatanJika kata sandi berisi karakter khusus, Anda harus menutup kata sandi dalam tanda kutip tunggal (' '). Contoh: 'test123!@#' Jika tidak, Anda mungkin gagal masuk ke database.
Setelah Anda masuk ke database, jalankan perintah dalam contoh kode untuk melakukan operasi berikut:
Buat pengguna sementara di database admin dan berikan pengguna sementara izin baca dan tulis pada database lokal.
Beralih ke pengguna sementara dan hapus konfigurasi replika set asli dari database lokal.
Beralih kembali ke pengguna test dan hapus pengguna sementara dan izin sementara.
CatatanGanti
<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')Jalankan perintah berikut untuk mematikan layanan MongoDB dan keluar dari shell mongo:
use admin db.shutdownServer() exitBuat 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.
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.keyJalankan perintah
vi /test/mongo/keyFile/mongodb.keyuntuk membuka file mongodb.key. Kemudian, tekan tomboliuntuk masuk ke mode edit. Contoh:MongoDB Encrypting FileCatatanKunci 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 (=).
Tekan tombol Esc untuk keluar dari mode edit, dan masukkan
:wquntuk menyimpan file dan keluar.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
CatatanFile autentikasi ini berlaku untuk semua node replika set.
Lakukan operasi berikut untuk menyiapkan dua node kosong untuk replika set:
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.confJalankan perintah berikut untuk membuat direktori data untuk dua node lainnya:
mkdir -p /test/mongo/data1 && mkdir -p /test/mongo/data2
Ubah file konfigurasi setiap node dengan melakukan operasi berikut:
Jalankan perintah
vi /test/mongo/mongod.confuntuk 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.confuntuk 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.confuntuk 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.
Jalankan perintah berikut untuk memulai ketiga node:
mongod -f /test/mongo/mongod.conf && mongod -f /test/mongo/mongod1.conf && mongod -f /test/mongo/mongod2.confSetelah 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 adminCatatanJika kata sandi berisi karakter khusus, Anda harus menutup kata sandi dalam tanda kutip tunggal (' '). Contoh: 'test123!@#' Jika tidak, Anda mungkin gagal masuk ke database.
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:
CatatanPerintah
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.
Lakukan operasi berikut untuk memeriksa apakah database MongoDB mandiri dalam mode replika set telah dimulai:
Jalankan perintah
exituntuk keluar dari shell mongo.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.
CatatanJika kata sandi berisi karakter khusus, Anda harus menutup kata sandi dalam tanda kutip tunggal (' '). Contoh: 'test123!@#' Jika tidak, Anda mungkin gagal masuk ke database.
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, filestorage.bsonsecara otomatis dibuat di direktori data. Dalam hal ini, hapus file storage.bson dan tentukan file konfigurasimongod.confuntuk memulai database MongoDB mandiri.Proses mongod lain mungkin sedang berjalan di sistem saat ini. Dalam hal ini, jalankan perintah
ps -e | grep mongoduntuk menanyakan PID dan jalankan perintahkill <PID>untuk menghentikan proses. Kemudian, tentukan file konfigurasimongod.confuntuk 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.