Topik ini menjelaskan cara mengunduh backup dari instans ApsaraDB for MongoDB dengan disk lokal dan memulihkannya ke database MongoDB standalone atau replica set yang dikelola sendiri.
Memulihkan backup logis
Catatan penggunaan
-
Karena MongoDB terus diperbarui, versi mongorestore yang lebih lama tidak kompatibel dengan versi MongoDB yang lebih baru. Untuk informasi tentang cara memilih versi mongorestore yang kompatibel, lihat mongorestore.
-
Jika database yang dikelola sendiri Anda adalah kluster sharded, atur parameter
<hostname>ke alamat komponen mongos di database yang dikelola sendiri Anda. -
Jika database yang dikelola sendiri Anda adalah kluster sharded, tambahkan parameter
--nsExclude="config.*"ke perintah pemulihan. Jika tidak, kesalahan mungkin terjadi selama proses pemulihan. -
Saat memulihkan data dari instansi kluster sharded ke database yang dikelola sendiri, unduh data backup untuk setiap shard dari instansi tersebut dan impor ke database yang dikelola sendiri. Jika instansi kluster sharded berisi dokumen yatim (orphaned documents), hal ini dapat menghasilkan data kotor di database yang dikelola sendiri.
Prasyarat
-
Unduh dan instal versi MongoDB yang sama dengan versi instans ApsaraDB for MongoDB Anda pada klien tempat database MongoDB yang dikelola sendiri berada. Klien tersebut dapat berupa server lokal atau Instance ECS. Untuk petunjuk instalasi, lihat Install MongoDB.
-
Anda telah mengunduh backup logis. Jika belum, lihat Download backup files.
Prosedur
-
Salin file backup yang telah diunduh ke klien yang menjalankan database MongoDB yang dikelola sendiri. Klien ini harus memiliki tool mongorestore yang terinstal.
-
Jalankan perintah berikut untuk mengimpor data dari file backup ke database MongoDB yang dikelola sendiri.
mongorestore -h <hostname> --port <server port> -u <username> -p <password> --drop --gzip --archive=<backupfile> -vvvv --stopOnErrorUbah parameter berikut:
-
<hostname>: Alamat server database MongoDB yang dikelola sendiri Anda. Gunakan 127.0.0.1 untuk instans lokal.
Jika database yang dikelola sendiri Anda adalah kluster sharded, atur parameter ini ke alamat komponen mongos.
-
<server port>: Port database MongoDB yang dikelola sendiri Anda.
-
<username>: Username untuk login ke database MongoDB yang dikelola sendiri Anda. Pastikan pengguna tersebut memiliki izin untuk semua database. Disarankan menggunakan akun root.
-
<password>: Password untuk pengguna database tersebut.
-
<backupfile>: Nama file backup logis yang telah diunduh.
Parameter perintah berikut tidak perlu diubah:
-
--drop: Menghapus setiap koleksi dari database target sebelum memulihkannya dari backup.
CatatanSaat memulihkan backup dari beberapa shard ke kluster sharded yang sama, gunakan parameter ini hanya saat memulihkan backup shard pertama.
-
--gzip: Mendekompresi file backup karena file tersebut dikompresi dengan gzip.
CatatanParameter ini didukung mulai dari MongoDB 3.1.4. Untuk informasi lebih lanjut, lihat mongo-tools.
-
-vvvv: Menentukan tingkat detail output. Semakin banyak karakter 'v', semakin rinci outputnya.
-
--stopOnError: Menghentikan proses impor jika terjadi kesalahan.
-
--nsExclude: Mengecualikan koleksi yang sesuai dari pemulihan. Misalnya,
--nsExclude="config.*".
Contoh:
mongorestore -h 127.0.0.1 --port 27017 -u root -p ******** --drop --gzip --archive=hins1111_data_20190710.ar -vvvv --stopOnError -
Memulihkan backup fisik
Prasyarat
-
Instans harus berupa replica set.
-
Fitur TDE harus dinonaktifkan untuk instans tersebut.
-
Mesin penyimpanan instans harus berupa WiredTiger atau RocksDB. Jika mesin penyimpanannya TerarkDB, lihat Restore data from a cloud disk backup.
Catatan-
Anda dapat melihat mesin penyimpanan instans Anda di halaman Basic Information di Konsol ApsaraDB for MongoDB.
-
Jika mesin penyimpanan instans adalah RocksDB, Anda harus mengompilasi dan menginstal MongoDB 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 versinya.
|
Instans MongoDB |
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 backup fisik
|
Format backup |
Ekstensi file |
Deskripsi |
|
TAR |
.tar.gz |
Untuk instans yang dibuat sebelum 26 Maret 2019, file backup fisik berformat TAR. |
|
xbstream |
_qp.xb |
Untuk instans yang dibuat pada atau setelah 26 Maret 2019, file backup fisik berformat xbstream. Catatan
Karena Windows tidak mendukung tool Percona XtraBackup yang diperlukan untuk mendekompresi file-file ini, file tersebut hanya dapat didekompresi pada sistem Linux. |
Lingkungan
-
Server yang digunakan dalam contoh ini adalah Instance ECS Alibaba Cloud yang menjalankan image Ubuntu 16.04 (64-bit). Untuk informasi lebih lanjut tentang cara membuat Instance ECS, lihat Create an ECS instance by using the wizard.
-
Versi MongoDB yang sesuai telah diinstal pada Instance ECS. Untuk petunjuk instalasi, lihat dokumentasi resmi MongoDB.
-
Variabel lingkungan MongoDB telah dikonfigurasi pada Instance ECS. Anda tidak perlu memasukkan path lengkap ke file yang dapat dieksekusi saat menjalankan perintah.
-
Direktori /test/mongo/data berfungsi sebagai direktori database untuk pemulihan fisik.
-
Direktori /test/mongo/data1 dan /test/mongo/data2 berfungsi sebagai direktori database untuk node replica set.
Langkah 1: Konfigurasi variabel lingkungan
Konfigurasikan variabel lingkungan untuk MongoDB di lingkungan yang dikelola sendiri agar tidak perlu mengetik path lengkap saat menjalankan perintah. Sebelum memulai, pastikan Anda telah menginstal MongoDB.
Jika Anda telah mengonfigurasi variabel lingkungan untuk MongoDB, lewati langkah ini dan lanjutkan ke Langkah 2: Unduh dan dekompresi file backup fisik.
-
Jalankan perintah berikut untuk membuka file
profiledi Linux:sudo vi /etc/profile -
Tekan
iuntuk masuk ke mode insert, lalu tambahkan baris berikut di akhir file:export PATH=$PATH:/<path_to_mongodb_server>/binCatatanDalam contoh ini, path server MongoDB adalah /test/mongo/bin. Ganti dengan path aktual Anda.
Contoh:
export PATH=$PATH:/test/mongo/bin -
Tekan Esc, ketik
:wq, lalu tekan Enter untuk menyimpan dan keluar. -
Jalankan perintah berikut untuk menerapkan perubahan:
source /etc/profile
Langkah 2: Unduh dan dekompresi file backup
-
Unduh file backup fisik MongoDB.
wget -c '<public_download_URL_of_backup_file>' -O <custom_filename>.<extension>Contoh:
wget -c 'http://rdsbak-hz-v3.oss-cn-hangzhou-internal.aliyuncs.com/custins5475****/hins1907****_data_20210906103710_qp.xb?Expires=......' -O backupfile._qp.xbCatatan-
Berdasarkan jenis file, pastikan ekstensi file berupa
.tar.gzatau_qp.xb. -
Letakkan URL unduhan dalam tanda kutip tunggal (') agar diproses dengan benar.
-
-
Jalankan perintah berikut untuk membuat direktori
datadi /test/mongo/ dan pindahkan file backup fisik MongoDB yang telah diunduh ke direktori /test/mongo/data/.mkdir -p /test/mongo/data && mv <physical_backup_filename.extension> /test/mongo/data -
Dekompresi file backup fisik.
-
Jika file backup fisik yang diunduh memiliki ekstensi .tar.gz, seperti hins20190412.tar.gz, gunakan metode berikut untuk mendekompresinya.
cd /test/mongo/data/ && tar xzvf hins20190412.tar.gz -
Jika file backup fisik yang diunduh memiliki ekstensi _qp.xb, seperti hins20190412_qp.xb, gunakan metode berikut untuk mendekompresinya.
-
Instal tool Percona XtraBackup dan paket qpress. Untuk informasi lebih lanjut, lihat langkah instalasi di situs resmi Percona XtraBackup.
-
Dekompresi file backup fisik.
# Masuk ke direktori tempat file berada. cd /test/mongo/data/ # Buka paket file. cat hins20190412_qp.xb | xbstream -x -v # Dekompresi file backup fisik. innobackupex --decompress --remove-original /test/mongo/data
-
-
Langkah 3: Pemulihan dalam mode standalone
-
Jalankan perintah berikut untuk membuat file konfigurasi bernama mongod.conf di direktori /test/mongo.
touch /test/mongo/mongod.conf -
Jalankan
vi /test/mongo/mongod.confuntuk membuka file mongod.conf, lalu tekaniuntuk masuk ke mode insert.Pilih templat konfigurasi startup berdasarkan mesin penyimpanan instans ApsaraDB for MongoDB Anda dan salin ke file mongod.conf.
CatatanFile konfigurasi mengatur mode startup ke standalone dan mengaktifkan otentikasi.
-
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.pidCatatanApsaraDB for MongoDB secara default menggunakan mesin penyimpanan WiredTiger dan mengaktifkan opsi directoryPerDB. Oleh karena itu, opsi ini disertakan 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 Esc, ketik
:wq, lalu tekan Enter untuk menyimpan dan keluar. -
Jalankan MongoDB dengan file konfigurasi mongod.conf yang baru.
mongod -f /test/mongo/mongod.conf -
Setelah startup selesai, jalankan perintah berikut untuk login ke database MongoDB.
mongo --host 127.0.0.1 -u <username> -p <password> --authenticationDatabase admin-
<username>: Akun database untuk instans MongoDB. Default-nya adalah root.
-
<password>: Password untuk pengguna database.
CatatanJika password Anda mengandung karakter khusus, letakkan dalam tanda kutip tunggal ('), misalnya: 'test123!@#'. Jika tidak, login mungkin gagal.
-
-
Di shell mongo, jalankan
show dbsuntuk melihat semua database di instans MongoDB lokal Anda dan verifikasi bahwa pemulihan berhasil. -
Proses pemulihan sekarang selesai. Anda dapat menjalankan perintah
exituntuk keluar dari shell mongo.
Setelah menyelesaikan langkah-langkah ini, Anda dapat menjalankan database MongoDB dalam mode standalone. Untuk menjalankan database dalam mode replica set, lihat Langkah 4.
Langkah 4: Jalankan dalam mode replica set
Secara default, backup fisik dari ApsaraDB for MongoDB berisi konfigurasi replica set dari instans aslinya. Untuk menjalankan database dalam mode replica set, Anda harus terlebih dahulu menghapus konfigurasi ini. Ikuti langkah-langkah berikut:
-
Dari command line, gunakan shell mongo untuk login ke database MongoDB sebagai pengguna test.
mongo --host 127.0.0.1 -u test -p <test_user_password> --authenticationDatabase adminCatatanJika password Anda mengandung karakter khusus, letakkan dalam tanda kutip tunggal ('), misalnya: 'test123!@#'. Jika tidak, login mungkin gagal.
-
Setelah login, jalankan perintah dalam blok kode berikut untuk melakukan tindakan berikut:
-
Di database admin, buat pengguna sementara dan berikan izin baca-tulis sementara pada database local.
-
Beralih ke pengguna sementara dan hapus konfigurasi replica set asli dari database local.
-
Kembali ke pengguna test dan hapus pengguna sementara beserta izinnya.
CatatanGanti placeholder
<test_user_password>dalam kode berikut dengan password pengguna test Anda yang sebenarnya sebelum menjalankannya.
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','<test_user_password>') db.dropRole('tmprole') db.dropUser('tmpuser') -
-
Jalankan perintah berikut untuk mematikan layanan MongoDB dan keluar dari shell mongo.
use admin db.shutdownServer() exit -
Buat file otentikasi replica set.
Untuk menjalankan MongoDB dalam mode replica set, Anda harus membuat keyfile yang digunakan anggota replica set untuk otentikasi timbal balik.
-
Jalankan perintah berikut untuk membuat direktori keyFile di direktori mongo dan buat file kunci di dalamnya.
mkdir -p /test/mongo/keyFile && touch /test/mongo/keyFile/mongodb.key -
Jalankan
vi /test/mongo/keyFile/mongodb.keyuntuk membuka file kunci. Tekaniuntuk masuk ke mode insert dan masukkan konten kunci. Contohnya:MongoDB Encrypting FileCatatanKonten keyfile memiliki batasan berikut:
-
Harus terdiri dari 6 hingga 1024 karakter.
-
Hanya boleh berisi karakter dari set karakter base64.
-
Tidak boleh mengandung tanda sama dengan (=).
-
-
Tekan Esc, ketik
:wq, lalu tekan Enter untuk menyimpan dan keluar. -
Jalankan perintah berikut untuk mengubah izin file otentikasi menjadi
400. Hal ini memastikan bahwa file hanya dapat dibaca oleh pemiliknya.sudo chmod 400 /test/mongo/keyFile/mongodb.key
CatatanFile otentikasi ini akan digunakan oleh semua node dalam replica set.
-
-
Ikuti langkah-langkah berikut untuk menyiapkan dua node kosong untuk replica set.
-
Jalankan perintah berikut untuk menyalin file mongod.conf dua kali 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 -
Jalankan perintah berikut untuk membuat direktori data untuk dua node lainnya.
mkdir -p /test/mongo/data1 && mkdir -p /test/mongo/data2
-
-
Ubah file konfigurasi untuk setiap node sebagai berikut:
-
Jalankan
vi /test/mongo/mongod.confuntuk membuka file konfigurasi Node 1. Perbarui file dengan konten berikut, lalu simpan dan keluar.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. Perbarui file dengan konten berikut, lalu simpan dan keluar.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. Perbarui file dengan konten berikut, lalu simpan dan keluar.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"
Deskripsi parameter utama:
-
systemLog.path / path: Path ke file log MongoDB untuk node saat ini,
-
storage.dbPath: Path ke file data MongoDB untuk node saat ini.
-
processManagement.pidFilePath: Path ke file PID (yang menyimpan ID proses) untuk proses MongoDB node saat ini.
-
security.keyFile: Path ke file otentikasi replica set. Semua node harus menggunakan file yang sama.
-
net.bindIp: Alamat IP node saat ini. Jika semua node ditempatkan di server yang sama, mereka dapat menggunakan alamat IP yang sama.
-
net.port: Nomor port untuk node saat ini. Jika semua node ditempatkan di server yang sama, mereka harus menggunakan nomor port yang berbeda.
-
replication: Konfigurasi replica set.
-
replication.replSetName: Nama replica set.
-
-
Jalankan perintah berikut untuk menjalankan ketiga node.
mongod -f /test/mongo/mongod.conf && mongod -f /test/mongo/mongod1.conf && mongod -f /test/mongo/mongod2.conf -
Setelah node berjalan, login ke database MongoDB sebagai pengguna test.
mongo --host 127.0.0.1 -u test -p <test_account_password> --authenticationDatabase adminCatatanJika password Anda mengandung karakter khusus, letakkan dalam tanda kutip tunggal ('), misalnya: 'test123!@#'. Jika tidak, login mungkin gagal.
-
Di shell mongo, jalankan perintah berikut untuk menambahkan node ke replica set dan menginisialisasinya.
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:
> 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>CatatanLangkah ini menggunakan perintah
rs.initiate(). Untuk penggunaan lengkap, lihat dokumentasi resmi MongoDB tentang rs.initiate().Setelah perintah berhasil dijalankan, dua node baru akan mulai menyinkronkan data dari node primary. Waktu yang dibutuhkan untuk proses ini bervariasi tergantung pada ukuran file backup. Setelah sinkronisasi data selesai, replica set sepenuhnya beroperasi.
-
Ikuti langkah-langkah berikut untuk memverifikasi bahwa startup berhasil.
-
Jalankan
exituntuk keluar dari shell mongo. -
Jalankan perintah berikut untuk login kembali ke database MongoDB.
mongo -u <username> -p <password> --authenticationDatabase admin-
<username>: Akun database untuk instans MongoDB. Default-nya adalah root.
-
<password>: Password untuk akun database.
CatatanJika password Anda mengandung karakter khusus, letakkan dalam tanda kutip tunggal ('), misalnya: 'test123!@#'. Jika tidak, login mungkin gagal.
-
-
Amati sisi kiri prompt shell mongo. Jika menampilkan
<replica_set_name>:PRIMARY>, replica set telah berhasil dijalankan.
-