Topik ini menjelaskan cara memulihkan data dari instans ApsaraDB for MongoDB ke database MongoDB yang dikelola sendiri dalam mode standalone atau set replika menggunakan file cadangan fisik.
Prasyarat
Instans merupakan instans set replika.
Instans menggunakan disk lokal untuk menyimpan data.
Fitur Transparent Data Encryption (TDE) dinonaktifkan untuk instans tersebut. Untuk informasi selengkapnya, lihat Konfigurasikan TDE untuk sebuah instans.
Mesin penyimpanan instans adalah WiredTiger atau RocksDB. Jika mesin penyimpanan instans adalah TerarkDB, Anda dapat memulihkan data instans ke database yang dikelola sendiri menggunakan cadangan logis. Untuk informasi selengkapnya, lihat Pulihkan data instans ke database MongoDB yang dikelola sendiri menggunakan cadangan logis.
CatatanAnda 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 dilengkapi mesin penyimpanan RocksDB.
Persyaratan versi database
Versi instans harus sesuai dengan versi database MongoDB yang dikelola sendiri. Tabel berikut mencantumkan pemetaan antara instans dan database MongoDB yang dikelola sendiri.
Instans 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 | Instans ApsaraDB for MongoDB yang dibuat sebelum 26 Maret 2019 memiliki file cadangan fisik dalam format .tar. |
xbstream | _qp.xb | Instans 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 tool Percona XtraBackup yang digunakan untuk mengekstrak file dalam format .xbstream. |
Lingkungan
Prosedur berikut menggunakan instance Elastic Compute Service (ECS) yang dibuat dari image Ubuntu 16.04 64-bit. Untuk informasi selengkapnya tentang cara membuat instance ECS, lihat Buat instance menggunakan wizard.
MongoDB versi yang diperlukan telah diinstal pada instance ECS. Untuk informasi selengkapnya tentang cara menginstal MongoDB, lihat Add a MongoDB Driver.
Variabel lingkungan telah dikonfigurasi untuk database MongoDB yang dikelola sendiri pada instance ECS. Saat menjalankan perintah, Anda tidak perlu lagi memasukkan path file yang dapat dieksekusi. Untuk informasi selengkapnya, lihat Langkah 1: Konfigurasikan variabel lingkungan.
Direktori /test/mongo/data pada instance ECS digunakan untuk instans set replika.
Direktori /test/mongo/data1 dan /test/mongo/data2 pada instance ECS digunakan untuk node set replika pada database MongoDB yang dikelola sendiri.
Langkah 1: Konfigurasikan variabel lingkungan
Konfigurasikan variabel lingkungan untuk database MongoDB yang dikelola sendiri agar Anda tidak perlu memasukkan path file yang dapat dieksekusi saat menjalankan perintah. Sebelum melakukan langkah ini, pastikan MongoDB telah diinstal. Untuk informasi selengkapnya, kunjungi Install MongoDB.
Jika variabel lingkungan MongoDB telah dikonfigurasi, lewati langkah ini dan lanjutkan ke Langkah 2. Untuk informasi selengkapnya, lihat Langkah 2: Unduh dan ekstrak file cadangan fisik.
Jalankan perintah berikut untuk membuka file
profiledi Linux:sudo vi /etc/profileTekan tombol
iuntuk masuk ke mode edit, lalu masukkan kode berikut di baris terakhir:export PATH=$PATH:/<Path server MongoDB>/binCatatanDalam contoh ini, path server MongoDB adalah /test/mongo/bin. Gunakan path aktual saat mengonfigurasi variabel lingkungan.
Contoh:
export PATH=$PATH:/test/mongo/binTekan tombol Esc untuk keluar dari mode edit, lalu ketik
:wquntuk menyimpan file dan keluar.Jalankan perintah berikut agar variabel lingkungan yang dikonfigurasi berlaku:
source /etc/profile
Langkah 2: Unduh dan ekstrak file cadangan fisik
Jalankan perintah berikut untuk mengunduh data cadangan fisik instans dari konsol ApsaraDB for MongoDB. Untuk informasi selengkapnya, lihat Unduh data cadangan fisik instans set replika.
wget -c '<URL unduh 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/, lalu pindahkan file cadangan fisik instans yang telah diunduh ke direktori /test/mongo/data/.mkdir -p /test/mongo/data && mv <Nama file cadangan fisik.Ekstensi> /test/mongo/dataEkstrak file cadangan fisik.
Jika nama file cadangan fisik memiliki ekstensi .tar.gz, seperti hins20190412.tar.gz, jalankan perintah berikut untuk mengekstrak file tersebut:
cd /test/mongo/data/ && tar xzvf hins20190412.tar.gzJika nama file cadangan fisik memiliki ekstensi _qp.xb, seperti hins20190412_qp.xb, lakukan operasi berikut untuk mengekstrak file tersebut:
Instal tool Percona XtraBackup dan qpress. Untuk informasi selengkapnya, kunjungi Installing Percona XtraBackup on Debian and Ubuntu.
Ekstrak file cadangan fisik. Dalam contoh ini, nama file adalah hins20190412_qp.xb.
# Masuk ke direktori tempat file berada. cd /test/mongo/data/ # Ekstrak paket. cat hins20190412_qp.xb | xbstream -x -v # Ekstrak 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 command line, ketik
vi /test/mongo/mongod.confuntuk membuka file mongod.conf, lalu tekan tomboliuntuk masuk ke mode edit.Anda dapat memilih templat konfigurasi berdasarkan mesin penyimpanan instans, lalu salin templat 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 diatur 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, lalu ketik
:wquntuk menyimpan file dan keluar.Gunakan file konfigurasi mongod.conf untuk menjalankan MongoDB.
mongod -f /test/mongo/mongod.confSetelah MongoDB dijalankan, jalankan perintah berikut untuk login ke database MongoDB yang dikelola sendiri dan masuk ke mongo shell:
mongo --host 127.0.0.1 -u <username> -p <password> --authenticationDatabase admin<username>: akun yang digunakan untuk login ke database MongoDB yang dikelola sendiri. Nilai default-nya adalah root.
<password>: password yang digunakan untuk login ke database MongoDB yang dikelola sendiri.
CatatanJika password berisi karakter khusus, Anda harus membungkus password tersebut dengan tanda petik tunggal (' '). Contoh: 'test123!@#'. Jika tidak, Anda mungkin gagal login ke database.
Jalankan perintah
show dbsdi mongo shell untuk menampilkan semua database yang tersedia di server MongoDB. Dengan demikian, Anda dapat memeriksa apakah proses pemulihan berhasil.Jalankan perintah
exitdi mongo shell untuk keluar dari mongo shell.
Setelah menyelesaikan langkah-langkah di atas, Anda dapat menjalankan database MongoDB dalam mode standalone. Untuk menjalankan database dalam mode set replika, lakukan operasi pada Langkah 4.
Langkah 4: Jalankan database MongoDB yang dikelola sendiri dalam mode set replika
Secara default, file cadangan fisik instans berisi konfigurasi set replikanya. Untuk menjalankan database MongoDB yang dikelola sendiri dalam mode set replika, Anda harus menghapus konfigurasi tersebut dari cadangan fisik. Lakukan operasi berikut:
Di command line, login ke database sebagai pengguna test menggunakan mongo shell:
mongo --host 127.0.0.1 -u test -p <Password akun test> --authenticationDatabase adminCatatanJika password berisi karakter khusus, Anda harus membungkus password tersebut dengan tanda petik tunggal (' '). Contoh: 'test123!@#'. Jika tidak, Anda mungkin gagal login ke database.
Setelah login ke database, jalankan perintah dalam kode contoh berikut untuk melakukan operasi berikut:
Buat pengguna sementara di database admin dan berikan izin baca-tulis kepada pengguna sementara tersebut pada database local.
Beralih ke pengguna sementara dan hapus konfigurasi set replika asli dari database local.
Kembali ke pengguna test dan hapus pengguna sementara beserta izin sementaranya.
CatatanGanti
<Password akun test>dalam kode berikut dengan password 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','<Password akun test>') db.dropRole('tmprole') db.dropUser('tmpuser')Jalankan perintah berikut untuk menghentikan layanan MongoDB dan keluar dari mongo shell:
use admin db.shutdownServer() exitBuat file autentikasi pada set replika.
Untuk menjalankan database dalam mode set replika, Anda harus membuat file kunci agar semua node set replika dapat saling mengotentikasi.
Jalankan perintah berikut untuk membuat folder keyFile di direktori mongo sebagai direktori file autentikasi dan buat file kunci di dalam direktori tersebut:
mkdir -p /test/mongo/keyFile && touch /test/mongo/keyFile/mongodb.keyJalankan perintah
vi /test/mongo/keyFile/mongodb.keyuntuk membuka file mongodb.key, lalu tekan tomboliuntuk masuk ke mode edit. Contoh:MongoDB Encrypting FileCatatanKunci yang digunakan untuk mengenkripsi data memiliki batasan berikut:
Panjang kunci harus antara 6 hingga 1.024 karakter.
Kunci hanya boleh berisi karakter yang dikodekan dalam Base64.
Kunci tidak boleh berisi tanda sama dengan (=).
Tekan tombol Esc untuk keluar dari mode edit, lalu ketik
:wquntuk menyimpan file dan keluar.Di command line, jalankan perintah berikut untuk mengubah izin file autentikasi menjadi
400. Dengan demikian, hanya pemilik file yang dapat melihat isi file tersebut.sudo chmod 400 /test/mongo/keyFile/mongodb.key
CatatanFile autentikasi ini berlaku untuk semua node set replika.
Lakukan operasi berikut untuk menyiapkan dua node kosong untuk set replika:
Jalankan perintah berikut untuk membuat dua salinan file mongod.conf. Kedua salinan tersebut 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 tersebut berdasarkan konten berikut. Lalu, 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 tersebut berdasarkan konten berikut. Lalu, 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 tersebut berdasarkan konten berikut. Lalu, 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 dalam systemLog.path: path untuk menyimpan file log MongoDB di node saat ini.
dbpath: path untuk menyimpan file data MongoDB di node saat ini.
pidFilePath: path untuk menyimpan file ID proses (PID) MongoDB di node saat ini.
keyFile: path untuk menyimpan file autentikasi set replika. Semua node dalam set replika harus menggunakan file autentikasi yang sama.
bindIp: alamat IP node saat ini. Jika semua node dalam set replika dideploy pada server yang sama, mereka dapat menggunakan alamat IP yang sama.
port: nomor port node saat ini. Jika semua node dalam set replika dideploy pada server yang sama, mereka harus menggunakan nomor port yang berbeda.
replication: konfigurasi set replika.
replSetName: nama set replika.
Jalankan perintah berikut untuk menjalankan ketiga node:
mongod -f /test/mongo/mongod.conf && mongod -f /test/mongo/mongod1.conf && mongod -f /test/mongo/mongod2.confSetelah ketiga node dijalankan, gunakan akun test untuk login ke database MongoDB yang dikelola sendiri.
mongo --host 127.0.0.1 -u test -p <Password akun test> --authenticationDatabase adminCatatanJika password berisi karakter khusus, Anda harus membungkus password tersebut dengan tanda petik tunggal (' '). Contoh: 'test123!@#'. Jika tidak, Anda mungkin gagal login ke database.
-
Di mongo shell, jalankan perintah berikut untuk menambahkan node yang telah Anda buat 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} ] })Inisialisasi yang berhasil akan menghasilkan output berikut:
> 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} ... ] ... }) { "ok" : 1 } rs0:SECONDARY>CatatanPerintah
rs.initiate()digunakan dalam langkah ini. Untuk informasi selengkapnya tentang perintah tersebut, kunjungi rs.initiate().Setelah perintah dieksekusi, data disinkronkan antara dua node yang ditambahkan dan node primary. Waktu yang dibutuhkan dalam proses ini bervariasi tergantung pada ukuran file cadangan. Setelah data disinkronkan, database MongoDB yang dikelola sendiri dijalankan dalam mode set replika.
Lakukan operasi berikut untuk memeriksa apakah database MongoDB yang dikelola sendiri dalam mode set replika telah dijalankan:
Jalankan perintah
exituntuk keluar dari mongo shell.Jalankan perintah berikut untuk login kembali ke database MongoDB yang dikelola sendiri:
mongo -u <username> -p <password> --authenticationDatabase admin<username>: akun yang digunakan untuk login ke database MongoDB yang dikelola sendiri. Nilai default-nya adalah root.
<password>: password yang digunakan untuk login ke database MongoDB yang dikelola sendiri.
CatatanJika password berisi karakter khusus, Anda harus membungkus password tersebut dengan tanda petik tunggal (' '). Contoh: 'test123!@#'. Jika tidak, Anda mungkin gagal login ke database.
Periksa apakah database MongoDB yang dikelola sendiri dijalankan dalam mode set replika. Jika
<Nama set replika>:PRIMARY>ditampilkan di sisi kiri command line di mongo shell, berarti database MongoDB yang dikelola sendiri telah dijalankan dalam mode set replika.
FAQ
Mengapa terjadi error saat saya menggunakan file konfigurasi mongod.conf yang ditentukan untuk menjalankan database MongoDB yang dikelola sendiri?
Penyebab umum meliputi:
Anda mungkin telah menjalankan database MongoDB yang dikelola sendiri sebelum menentukan file konfigurasi
mongod.conf. Akibatnya, filestorage.bsonsecara otomatis dibuat di direktori data. Dalam kasus ini, hapus file storage.bson dan tentukan file konfigurasimongod.confuntuk menjalankan database MongoDB yang dikelola sendiri.Proses mongod lain mungkin sedang berjalan di sistem saat ini. Dalam kasus ini, jalankan perintah
ps -e | grep mongoduntuk mencari PID dan jalankan perintahkill <PID>untuk menghentikan proses tersebut. Lalu, tentukan file konfigurasimongod.confuntuk menjalankan database MongoDB yang dikelola sendiri.Path log systemLog.path yang tidak valid mungkin ditentukan dalam file konfigurasi
mongod.conf. Dalam kasus ini, periksa apakah path yang ditentukan ada dan apakah file log memiliki nama yang ditentukan. Contoh:path: /<Path file log>/<Nama file log>.log.
Mengapa terjadi error saat saya menggunakan file konfigurasi mongod.conf untuk menjalankan database MongoDB yang dikelola sendiri dalam mode set replika?
Anda mungkin gagal mengubah izin file autentikasi keyFile yang ditentukan menjadi 600. Di command line, jalankan perintah sudo chmod 600 <Path keyFile> untuk mengubah izin tersebut.
Mengapa performa sistem menjadi rendah setelah saya menjalankan database MongoDB yang dikelola sendiri dalam mode set replika?
Setelah Anda menjalankan database MongoDB yang dikelola sendiri dalam mode set replika, sistem secara otomatis mulai menyinkronkan data dari node primary ke node lainnya. Proses ini dapat memengaruhi performa sistem. Performa sistem akan kembali normal setelah data disinkronkan.