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
Salin file cadangan yang diunduh ke klien tempat database MongoDB yang dikelola sendiri Anda berada. Pastikan alat mongorestore telah diinstal pada klien ini.
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 --stopOnErrorUbah 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.
CatatanSaat 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.
CatatanParameter 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.
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 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.
Jalankan perintah berikut untuk membuka file variabel lingkungan
profiledi Linux.sudo vi /etc/profileTekan tombol
iuntuk masuk ke mode edit. Kemudian, tambahkan konten berikut pada baris terakhir:export PATH=$PATH:/<Path to the MongoDB server>/binCatatanPada contoh ini, jalur ke server MongoDB adalah /test/mongo/bin. Sesuaikan jalur tersebut sesuai dengan kebutuhan Anda.
Contoh:
export PATH=$PATH:/test/mongo/binTekan tombol Esc untuk keluar dari mode edit. Kemudian, masukkan
:wquntuk menyimpan file dan keluar.Jalankan perintah berikut untuk menerapkan perubahan pada file variabel lingkungan:
source /etc/profile
Langkah 2: Unduh dan ekstrak file cadangan fisik
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.xbCatatanBerdasarkan jenis file yang diunduh, pastikan ekstensi file adalah
.tar.gzatau_qp.xb.Tutup URL unduhan dalam tanda kutip tunggal (') untuk memastikan URL diparsing dengan benar.
Jalankan perintah berikut untuk membuat direktori
datadi 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/dataEkstrak 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.gzJika file cadangan fisik yang diunduh memiliki ekstensi _qp.xb, seperti hins20190412_qp.xb, gunakan metode berikut untuk mengekstraknya.
Instal alat Percona XtraBackup dan paket qpress. Untuk informasi lebih lanjut, lihat langkah-langkah instalasi di situs web resmi Percona XtraBackup.
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
Jalankan perintah berikut untuk membuat file konfigurasi bernama mongod.conf di folder /test/mongo.
touch /test/mongo/mongod.confDi baris perintah, jalankan
vi /test/mongo/mongod.confuntuk membuka file mongod.conf. Tekan tomboliuntuk masuk ke mode edit.Pilih templat konfigurasi startup berdasarkan mesin penyimpanan instans ApsaraDB for MongoDB dan salin ke file mongod.conf.
CatatanFile 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.pidCatatanSecara 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
Tekan tombol Esc untuk keluar dari mode edit. Kemudian, masukkan
:wquntuk menyimpan file dan keluar.Mulai MongoDB menggunakan file konfigurasi mongod.conf baru.
mongod -f /test/mongo/mongod.confSetelah 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.
CatatanJika kata sandi Anda mengandung karakter khusus, tutup kata sandi dalam tanda kutip tunggal ('). Contohnya: 'test123!@#'. Jika tidak, login mungkin gagal.
Di shell mongo, jalankan
show dbsuntuk menampilkan semua database di instans MongoDB lokal dan verifikasi bahwa pemulihan berhasil.Pemulihan sekarang selesai. Anda dapat menjalankan perintah
exitdi 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:
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 adminCatatanJika kata sandi Anda mengandung karakter khusus, gunakan tanda kutip tunggal (') untuk melingkupinya. Contoh: 'test123!@#'. Jika tidak, login mungkin gagal.
Setelah berhasil masuk, jalankan perintah dalam blok kode berikut untuk melakukan tindakan berikut:
Buat pengguna sementara di database admin dan berikan izin baca-tulis sementara pada database lokal.
Beralih ke pengguna sementara dan hapus konfigurasi set replika asli dari database lokal.
Kembalikan ke pengguna uji dan hapus pengguna sementara beserta izinnya.
CatatanGanti
<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')Jalankan perintah berikut untuk mematikan layanan MongoDB dan keluar dari shell mongo.
use admin db.shutdownServer() exitBuat file autentikasi set replika.
Untuk memulai MongoDB dalam mode set replika, Anda harus membuat file kunci untuk autentikasi antar node set replika.
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.keyJalankan
vi /test/mongo/keyFile/mongodb.keyuntuk membuka file mongodb.key. Tekan tomboliuntuk masuk ke mode edit dan masukkan konten enkripsi. Sebagai contoh:MongoDB Encrypting FileCatatanKonten 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 (=).
Tekan tombol Esc untuk keluar dari mode edit. Kemudian, masukkan
:wquntuk menyimpan dan keluar dari file.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
CatatanFile autentikasi ini diterapkan ke semua node set replika.
Siapkan dua node kosong untuk set replika.
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.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 sesuai dengan langkah-langkah berikut:
Jalankan
vi /test/mongo/mongod.confuntuk 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.confuntuk 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.confuntuk 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.
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 startup selesai, masuk ke database MongoDB menggunakan akun uji.
mongo --host 127.0.0.1 -u test -p <password_of_the_test_account> --authenticationDatabase adminCatatanJika kata sandi Anda mengandung karakter khusus, gunakan tanda kutip tunggal (') untuk melingkupinya. Contoh: 'test123!@#'. Jika tidak, login mungkin gagal.
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:
CatatanLangkah 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.
Verifikasi bahwa startup berhasil.
Jalankan
exituntuk keluar dari shell mongo.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.
CatatanJika kata sandi Anda mengandung karakter khusus, gunakan tanda kutip tunggal (') untuk melingkupinya. Contoh: 'test123!@#'. Jika tidak, login mungkin gagal.
Amati sisi kiri baris perintah shell mongo. Jika
<Nama_set_replika>:PRIMARY>ditampilkan, startup dalam mode set replika berhasil.