MongoDB備份和還原的操作指南
MongoDB 提供的命令行實(shí)用程序mongodump
和mongorestore
創(chuàng)建備份和恢復(fù)數(shù)據(jù)的過(guò)程。
一、數(shù)據(jù)備份
mongorestore
和mongodump
實(shí)用程序可處理BSON數(shù)據(jù)轉(zhuǎn)儲(chǔ),對(duì)于創(chuàng)建小型部署的備份非常有用。要實(shí)現(xiàn)彈性且無(wú)中斷的備份,請(qǐng)將文件系統(tǒng)快照或區(qū)塊級(jí)磁盤快照與 MongoDB Atlas 的云備份結(jié)合使用。
性能影響
由于mongodump和mongorestore是通過(guò)與正在運(yùn)行的mongod實(shí)例交互來(lái)進(jìn)行操作的,因此它們可能會(huì)影響正在運(yùn)行的數(shù)據(jù)庫(kù)的性能。這些工具不僅會(huì)為正在運(yùn)行的數(shù)據(jù)庫(kù)實(shí)例創(chuàng)建流量,還會(huì)強(qiáng)制數(shù)據(jù)庫(kù)通過(guò)內(nèi)存讀取所有數(shù)據(jù)。當(dāng) MongoDB 讀取不常使用的數(shù)據(jù)時(shí),它可能會(huì)逐出更頻繁訪問(wèn)的數(shù)據(jù),從而導(dǎo)致數(shù)據(jù)庫(kù)常規(guī)工作負(fù)載的性能下降。
排除 local 數(shù)據(jù)庫(kù)
mongodump
會(huì)在其輸出中排除local
數(shù)據(jù)庫(kù)的內(nèi)容。
local數(shù)據(jù)庫(kù):用于存儲(chǔ)診斷信息、復(fù)制集配置和操作日志等數(shù)據(jù),其中的集合不會(huì)被復(fù)制
基本 mongodump 操作
mongodump`實(shí)用程序通過(guò)連接到正在運(yùn)行的`mongod來(lái)備份數(shù)據(jù)。
該工具可以為整個(gè)服務(wù)器、數(shù)據(jù)庫(kù)或集合創(chuàng)建備份,也可以結(jié)合查詢來(lái)僅備份一個(gè)集合的某一部分。
備份命令
export local_tar_dir="/opt/mongodb/upload_backup/" export dump_name="backup-mongo{{ now_date |replace('-', '')}}"#顯示日期 mongodump \ -h {{ ansible_default_ipv4.address }} \ -u{{ mongo_user }} -p{{ mongo_password }} \ --authenticationDatabase admin \ -o {{ local_tar_dir }}/{{ dump_name }} \ --gzip #-o: 指定輸出目錄 #打成壓縮包后進(jìn)行上傳到對(duì)象存儲(chǔ)
備份命令其他參數(shù)
要限制數(shù)據(jù)庫(kù)轉(zhuǎn)儲(chǔ)中包含的數(shù)據(jù)量,可以指定--db
和--collection
作為mongodump
的選項(xiàng)。例如:
mongodump --collection=myCollection --db=test
二、集群還原
適用于整個(gè)集群不可用或者誤刪除了部分?jǐn)?shù)據(jù)無(wú)法找回的情況
下載備份到指定目錄
#obs華為云 sudo /usr/local/bin/obsutil ls obs://jws2-live-cn-backup-01/db-db-mongodb/2024-03-28/05/ -s | grep "_master" sudo /usr/local/bin/obsutil cp {{ first_tarball }} /tmp/ #gcp谷歌云 /bin/gsutil ls gs://{{cloud_backup_bucket}}/db-mongodb/{{now_date}}/{{now_hour}}/ /bin/gsutil cp {{ backup_file.stdout }} /tmp/
基本 mongorestore 操作
mongorestore實(shí)用程序可恢復(fù)mongodump創(chuàng)建的二進(jìn)制備份。默認(rèn)情況下, mongorestore會(huì)在dump/目錄中查找數(shù)據(jù)庫(kù)備份。
mongorestore實(shí)用程序通過(guò)直接連接到正在運(yùn)行的mongod來(lái)恢復(fù)數(shù)據(jù)。
mongorestore 可以恢復(fù)整個(gè)數(shù)據(jù)庫(kù)備份或部分的備份。
可以考慮使用mongorestore --drop選項(xiàng)從數(shù)據(jù)庫(kù)中刪除每個(gè)集合,然后再?gòu)膫浞莼謴?fù)。
如果恢復(fù)到強(qiáng)制執(zhí)行訪問(wèn)控制的實(shí)例,請(qǐng)同時(shí)包括--username和--authenticationDatabase 。
還原前準(zhǔn)備
需要保證副本集正常運(yùn)行,所有游戲服都停止,不會(huì)有客戶端對(duì)mongodb進(jìn)行寫操作。
登錄mongodb副本集
#登錄mongodb副本集 mongo mongodb://root:mgwh7B8H9w5dc8j0@10.156.0.4:27017,10.156.0.5:27017,10.156.0.6:27017,/admin?replicaSet=jws2-test
查找主節(jié)點(diǎn)
rs.status() #副本集配置成功后,172.16.60.205為主節(jié)點(diǎn)PRIMARY,172.16.60.206/207為副本節(jié)點(diǎn)SECONDARY。 health:1 1表明狀態(tài)是正常,0表明異常 state:1 值小的是primary節(jié)點(diǎn)、值大的是secondary節(jié)點(diǎn) #"stateStr" : "PRIMARY", (代表為主節(jié)點(diǎn))
還原命令
副本集還原和單節(jié)點(diǎn)命令相同,需要注意一點(diǎn),要保證-h參數(shù)指定的主機(jī)為副本集的主節(jié)點(diǎn)。
以下為對(duì)單個(gè)庫(kù)進(jìn)行還原,可以按照自己的需求進(jìn)行還原操作。
mongorestore \ -h 172.16.185.222:27011 \ -p mgwh7B8H9w5dc8j0 -u root1 \ --authenticationDatabase=admin \ --db=SilenceDB --drop --gzip \ /home/jms_ops_all/backup-mongo20240507/SilenceDB/
三、單節(jié)點(diǎn)還原
適用于單機(jī)點(diǎn)不可用,但是集群可用的情況。
向副本集添加成員
MongoDB 提供了兩個(gè)用于恢復(fù)副本集從節(jié)點(diǎn)成員的選項(xiàng):
- 手動(dòng)將數(shù)據(jù)庫(kù)文件復(fù)制到每個(gè)數(shù)據(jù)目錄。
- 允許初始同步以自動(dòng)分發(fā)數(shù)據(jù)。
具體步驟
停止數(shù)據(jù)異常的成員節(jié)點(diǎn)
sudo supervisorctl stop mongodb
清理數(shù)據(jù)異常的成員節(jié)點(diǎn)的數(shù)據(jù)目錄
mv ./mongodata ./mongodata_bak mkdir ./mongodata
情況一:數(shù)據(jù)量不大,直接啟動(dòng)即可,初始同步會(huì)將數(shù)據(jù)從主成員復(fù)制到新成員。
sudo supervisorctl start mongodb
情況二:數(shù)據(jù)量大,
將主成員的數(shù)據(jù)目錄復(fù)制到新的輔助成員,再啟動(dòng)即可。
以上就是MongoDB備份和還原的操作指南的詳細(xì)內(nèi)容,更多關(guān)于MongoDB備份還原的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python實(shí)現(xiàn)爬蟲數(shù)據(jù)存到 MongoDB
本文給大家分享的是使用python實(shí)現(xiàn)將爬蟲爬到的數(shù)據(jù)存儲(chǔ)到mongoDB數(shù)據(jù)庫(kù)中的實(shí)例代碼,有需要的小伙伴可以參考下2016-09-09MongoDB搭建高可用集群的完整步驟(3個(gè)分片+3個(gè)副本)
這篇文章主要給大家介紹了關(guān)于MongoDB搭建高可用集群(3個(gè)分片+3個(gè)副本)的完整步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用MongoDB具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08PHP MongoDB GridFS 存儲(chǔ)文件的方法詳解
這篇文章主要介紹了PHP MongoDB GridFS 存儲(chǔ)文件的方法詳解的相關(guān)資料,需要的朋友可以參考下2016-10-10Mongodb在UPDATE操作中使用$push向數(shù)組中插入數(shù)據(jù)的方法
在update操作中,使用$push操作符向數(shù)組中插入新的元素,按照相應(yīng)的語(yǔ)法,使用$push操作符,下面通過(guò)本文給大家分享Mongodb在UPDATE操作中使用$push向數(shù)組中插入數(shù)據(jù)的方法,感興趣的朋友一起看看吧2024-06-06MongoDB內(nèi)存過(guò)高問(wèn)題分析及解決
有個(gè)3.2.7版本的mongo復(fù)制集,最近幾天頻繁告警內(nèi)存過(guò)高,所以這篇文章給大家介紹了MongoDB內(nèi)存過(guò)高問(wèn)題分析及解決。并通過(guò)代碼示例給出詳細(xì)的解決方案,需要的朋友可以參考下2024-03-03mongodb在建立一個(gè)T級(jí)別的數(shù)據(jù)庫(kù)時(shí),進(jìn)程掛掉的解決方法
這篇文章主要介紹了mongodb在建立一個(gè)T級(jí)別的數(shù)據(jù)庫(kù)時(shí),進(jìn)程掛掉,需要的朋友可以參考下2017-03-03MongoDB快速入門筆記(三)之MongoDB插入文檔操作
這篇文章主要介紹了MongoDB快速入門筆記(三)之MongoDB插入文檔操作 的相關(guān)資料,非常不錯(cuò)具有參考借鑒價(jià)值,需要的朋友可以參考下2016-06-06