電腦系統(tǒng)可以備份
很多人平時都沒有備份驅(qū)動的習(xí)慣,一旦系統(tǒng)崩潰,重裝系統(tǒng)后又要從網(wǎng)上下載新的驅(qū)動進(jìn)行安裝。有一些電腦上可能還裝了一些比較特殊的驅(qū)動,去網(wǎng)上也不太好找,怎么辦呢?其實還是有補(bǔ)救的辦法的,我們可以進(jìn)PE把...
2025.07.03COPYRIGHT ? 2023
粵ICP備2021108052號
郵箱:611661226@qq.com
留言給我作者:張洪
愛可生南區(qū) DBA 團(tuán)隊成員,主要負(fù)責(zé)mysql故障處理及相關(guān)技術(shù)支持。愛好旅游,攝影。
本文來源:原創(chuàng)投稿
* 愛可生開源社區(qū)出品,原創(chuàng)內(nèi)容未經(jīng)授權(quán)不得隨意使用,轉(zhuǎn)載請聯(lián)系小編并注明來源。
Percona Backup for MongoDB(PBM)是一個針對MongoDB副本集和分片的一致性備份開源工具,它支持邏輯備份、物理備份、增量備份以及選擇性備份和恢復(fù)等特性,并且支持Point-in-Time恢復(fù)到指定時間點。
但非常可惜的是物理備份相關(guān)功能目前僅適用于Percona Server for MongoDB的分支,因此下面主要圍繞邏輯備份與Point-in-Time來展開,MongoDB Community版本要求4.0及以上。
pbm-agent
pbm-agent用于執(zhí)行備份、恢復(fù),刪除和其它操作的進(jìn)程,它必須運行在集群的每個mongod實例上。包括副本集中的secondary節(jié)點以及分片集群中的config副本集。
所有pbm-agent都會監(jiān)視PBM Control集合的更新,當(dāng)PBM CLI對PBM Control集合產(chǎn)生更新時,將會在每個副本集上選擇一個secondary上的pbm-agent執(zhí)行操作,如果沒有響應(yīng)則會選擇Primary上的pbm-agent執(zhí)行操作。
被選中的pbm-agent將會加鎖,避免同時觸發(fā)備份和恢復(fù)等互斥操作。操作完成后將會釋放鎖,并更新PBM Control集合
PBM CLI
PBM CLI是一個操作PBM的命令行工具,它使用PBM Control集合與pbm-agent進(jìn)程通信。通過更新和讀取操作、日志等相應(yīng)的PBM Control集合來啟動和監(jiān)視備份和恢復(fù)操作。同時,它也將PBM配置信息保存在PBM Control集合中。
PBM Control collections
PBM Control collections是存儲配置數(shù)據(jù)和備份狀態(tài)的特殊集合,分片環(huán)境存放在config副本集的admin數(shù)據(jù)庫中,副本集則保存在自身的admin數(shù)據(jù)庫中。
主要包含以下集合:
remote backup storge 遠(yuǎn)程備份存儲是保存?zhèn)浞菸募奈恢茫梢允荢3存儲,也可以是Filesystem。通過pbm list命令可以查看備份集。備份文件名稱都是以UTC備份開始時間作為前綴,每個備份都有一個元數(shù)據(jù)文件。對于備份中的每個副本集:
下載PBM
# wget https://downloads.percona.com/downloads/percona-backup-mongodb/percona-backup-mongodb-2.0.3/binary/tarball/percona-backup-mongodb-2.0.3-x86_64.tar.gz
解壓PBM
# tar -xvf percona-backup-mongodb-2.0.3-x86_64.tar.gz
配置環(huán)境變量
# echo "export PATH=$PATH:/usr/local/percona-backup-mongodb-2.0.3-x86_64" >> /etc/profile# source /etc/profile
在副本集上創(chuàng)建PBM用戶,如果是分片環(huán)境,則每個shard以及config都需要創(chuàng)建
# create pbm roleshard1:PRIMARY> db.getSiblingDB("admin").createRole({ "role": "pbmAnyAction","privileges": [ { "resource": { "anyResource": true },"actions": [ "anyAction" ] }],"roles": []});# create pbm usershard1:PRIMARY> db.getSiblingDB("admin").createUser({user: "pbmuser","pwd": "secretpwd","roles" : [{ "db" : "admin", "role" : "readWrite", "collection": "" },{ "db" : "admin", "role" : "backup" },{ "db" : "admin", "role" : "clusterMonitor" },{ "db" : "admin", "role" : "restore" },{ "db" : "admin", "role" : "pbmAnyAction" }]});
配置remote backup storge,除mongos外,每個節(jié)點都需要存在對應(yīng)的備份目錄
cat > /etc/pbm_config.yaml <
將配置寫入到數(shù)據(jù)庫中,分片集群需要填寫config的地址
pbm config --file /etc/pbm_config.yaml --mongodb-uri "mongodb://pbmuser:secretpwd@10.186.65.37:27018,10.186.65.66:27018,10.186.65.68:27018/?replicaSet=config"
啟動每個節(jié)點對應(yīng)的pbm-agent
nohup pbm-agent --mongodb-uri "mongodb://pbmuser:secretpwd@10.186.65.37:27017" > /var/log/pbm-agent-27017.log 2>&1 &
為了后續(xù)方便,不用每次輸入--mongodb-uri,可以把PBM_MONGODB_URI設(shè)置到環(huán)境變量中
# echo 'export PBM_MONGODB_URI="mongodb://pbmuser:secretpwd@10.186.65.37:27018,10.186.65.66:27018,10.186.65.68:27018/?replicaSet=config"' >> /etc/profile# source /etc/profile
全備支持物理備份和邏輯備份,通過--type指定,可選項有physical和logical兩種。因MongoDB社區(qū)版不支持物理備份,就只圍繞邏輯備份來展開。
全量備份即對整個集群除mongos以外進(jìn)行完整的備份,只需要執(zhí)行一次,就能完成整個集群的備份。備份命令如下:
pbm backup --type=logical --mongodb-uri "mongodb://pbmuser:secretpwd@10.186.65.37:27018,10.186.65.66:27018,10.186.65.68:27018/?replicaSet=config"
備份壓縮
pbm支持備份壓縮,目前的算法有g(shù)zip、zstd、snappy、lz4,通過--compression選項指定。同時能指定對應(yīng)的壓縮級別,通過--compression-level選項指定。不同算法的壓縮級別如下所示:
壓縮算法 壓縮級別 默認(rèn) ztsd 1-4 2 snappy NULL NULL lz4 1-16 1 gzip or pgzip -1,0,1,9 -1
優(yōu)先級
負(fù)責(zé)備份的pbm-agent默認(rèn)會在從節(jié)點中隨機(jī)選出,規(guī)定時間內(nèi)從節(jié)點沒有響應(yīng),則在主節(jié)點進(jìn)行備份。現(xiàn)在可以通過指定每個節(jié)點的備份優(yōu)先級來控制備份節(jié)點選擇,避免在一個機(jī)器承載多個實例的情況下備份集中在同一臺服務(wù)器導(dǎo)致IO性能不足。在配置文件中加入下列配置
backup:priority:"10.186.65.37:27017": 2"10.186.65.37:27018": 1"10.186.65.68:27017": 2
不在配置文件中的節(jié)點優(yōu)先級默認(rèn)為1,如果沒有設(shè)置任何優(yōu)先級,下列類型的節(jié)點則優(yōu)先被選中
備份管理
查看pbm狀態(tài)
pbm status --mongodb-uriCluster:========shard3:- shard3/10.186.65.68:27017 [P]: pbm-agent v2.0.3 OKshard1:- shard1/10.186.65.37:27017 [P]: pbm-agent v2.0.3 OKshard2:- shard2/10.186.65.66:27017 [P]: pbm-agent v2.0.3 OKconfig:- config/10.186.65.37:27018 [P]: pbm-agent v2.0.3 OK- config/10.186.65.66:27018 [S]: pbm-agent v2.0.3 OK- config/10.186.65.68:27018 [S]: pbm-agent v2.0.3 OKPITR incremental backup:========================Status [OFF]Currently running:==================(none)Backups:========FS/data/backupSnapshots:2023-02-22T07:18:40Z 4.66MB [restore_to_time: 2023-02-22T07:18:45Z]
備份完成后,可以通過pbm list查看所有備份集,也可以通過pbm describe-backup查看備份的具體信息
# pbm listBackup snapshots:2023-02-22T07:18:40Z [restore_to_time: 2023-02-22T07:18:45Z]# pbm describe-backup 2023-02-22T07:18:40Zname: "2023-02-22T07:18:40Z"opid: 63f5c1d0a6375c868415cac4type: logicallast_write_time: "2023-02-22T07:18:45Z"last_transition_time: "2023-02-22T07:18:59Z"mongodb_version: 4.0.28pbm_version: 2.0.3status: donesize_h: 4.7 MiBreplsets:- name: shard2status: donelast_write_time: "2023-02-22T07:18:44Z"last_transition_time: "2023-02-22T07:18:55Z"- name: shard3status: donelast_write_time: "2023-02-22T07:18:44Z"last_transition_time: "2023-02-22T07:18:59Z"- name: shard1status: donelast_write_time: "2023-02-22T07:18:44Z"last_transition_time: "2023-02-22T07:18:57Z"- name: configstatus: donelast_write_time: "2023-02-22T07:18:45Z"last_transition_time: "2023-02-22T07:18:48Z"configsvr: true
查看備份日志可以使用pbm logs進(jìn)行查看,有下列選項可選:
# 查看特定備份的日志pbm logs --tail=200 --event=backup/2023-02-22T07:18:40Z# 查看副本集shard1的日志pbm logs -n shard1 -s E
如果正在運行任務(wù)想要終止,可以使用pbm canal-backup取消
pbm cancel-backup
刪除快照備份可以使用pbm delete-backup,默認(rèn)刪除前會進(jìn)行二次確認(rèn),指定--force選項可以直接刪除。刪除oplog chunk可以執(zhí)行pbm delete-pitr
pbm delete-backup --force 2023-02-22T07:18:40Z
如果想要刪除指定時間之前的備份,可以設(shè)置--older-than參數(shù),傳遞下列格式的時間戳
Point-in-Time Recovery可以將數(shù)據(jù)還原到指定時間點,期間會從備份快照中恢復(fù)數(shù)據(jù)庫,并重放oplog到指定時間點。Point-in-Time Recovery是v1.3.0加入的,需要手動啟用pitr.enabled參數(shù)
pbm config --set pitr.enabled=true
在啟用Point-in-Time Recovery之后,pbm-agent會定期保存oplog chunk,一個chunk包含10分鐘跨度的oplog事件,如果禁用時間點恢復(fù)或因備份快照操作的開始而中斷,則時間可能會更短。oplog保存在遠(yuǎn)程存儲的pbmPitr子目錄中,chunk的名稱反映了開始時間和結(jié)束時間
如果想要調(diào)整時間跨度,可以配置pitr.oplogSpanMin
pbm config --set pitr.oplogSpanMin=5
oplog備份也支持壓縮,可以配置pitr.compression
pbm config --set pitr.compression=gzip
恢復(fù)注意事項 通過pbm store命令并指定還原時間戳,在還原之前還需要注意以下幾點:
restore:batchSize: 500numInsertionWorkers: 10
分片集群恢復(fù)
分片集群在做恢復(fù)前,需要先完成以下步驟
mongos> sh.stopBalancer()
pbm config --set pitr.enabled=false
查看備份快照和PITR有效時間點
pbm listBackup snapshots:2023-02-22T07:18:40Z [restore_to_time: 2023-02-22T07:18:45Z]PITR :2023-02-22T07:18:46Z - 2023-02-22T08:36:45Z
執(zhí)行PITR恢復(fù)
pbm restore --time="2023-02-22T08:30:00"
恢復(fù)完成后重新啟用PITR和balance進(jìn)程,并開啟mongos對外提供服務(wù)
mongos> sh.startBalancer()pbm config --set pitr.enabled=true
異機(jī)恢復(fù)
從v1.8版本開始,可以將邏輯備份恢復(fù)到具有相同或更多shard的新環(huán)境中,并且這些shard的副本集名稱可以與原環(huán)境不同。但我們需要配置以下映射關(guān)系
pbm restore --time="2023-02-22T08:30:00" --replset-remapping="shard1=shard4,shard2=shard5"
pbm提供了性能測試工具pbm-speed-test,默認(rèn)采用半隨機(jī)數(shù)據(jù)進(jìn)行測試,如果要基于現(xiàn)有集合進(jìn)行測試,請設(shè)置--sample-collection選項
pbm-speed-test storage --compression=gzip --size-gb 100Test started100.00GB sent in 37m17s.Avg upload rate = 45.78MB/s
pbm整體的性能相對于mongodump并沒有較大的提升,主要還是體現(xiàn)在下列幾個特點:
選擇性備份和恢復(fù)功能可以針對指定的數(shù)據(jù)庫或集合,但目前還只是一個實驗性功能,謹(jǐn)慎使用。它具有以下場景選項:
備份指定集合時,需要指定--ns選項,格式為
pbm backup --ns=test.col1
如果要備份整個test數(shù)據(jù)庫,可以改為下列格式
pbm backup --ns=test.*
恢復(fù)指定數(shù)據(jù)庫或集合,恢復(fù)過程中不會影響現(xiàn)有集群的可用性
pbm restore 2023-02-22T07:18:40Z --ns test.col1
基于時間點恢復(fù)數(shù)據(jù)庫或集合
pbm restore --base-snapshot 2023-02-22T07:18:40Z --time 2023-02-22T09:06:00 --ns test.col1
已知限制
參考鏈接:https://docs.percona.com/percona-backup-mongodb/intro.html
很多人平時都沒有備份驅(qū)動的習(xí)慣,一旦系統(tǒng)崩潰,重裝系統(tǒng)后又要從網(wǎng)上下載新的驅(qū)動進(jìn)行安裝。有一些電腦上可能還裝了一些比較特殊的驅(qū)動,去網(wǎng)上也不太好找,怎么辦呢?其實還是有補(bǔ)救的辦法的,我們可以進(jìn)PE把...
2025.07.03每經(jīng)AI快訊,電子產(chǎn)品迭代升級速度越來越快,消費者家中的舊手機(jī)、舊電腦也越來越多,一鍵刪除、格式化、恢復(fù)出廠設(shè)置能徹底清除個人數(shù)據(jù),保證信息安全嗎?315信息安全實驗室對此展開了專門的測試,測試表明:...
2025.07.03在Active Directory(AD)環(huán)境中,用戶通過域中的計算機(jī)認(rèn)證他們自身。從AD中刪除這些計算機(jī)賬戶時,系統(tǒng)也會自動從域中刪除它們。于是,用戶不能再通過些計算機(jī)登錄網(wǎng)絡(luò)。為允許用戶訪問域資源...
2025.07.04WinCC操作手冊工程備份及恢復(fù)備份步驟注意:在備份前要關(guān)閉WINCC。如圖1.1所示步驟,單擊Project Duplicator。圖1.12、在彈出的“WinCC項目復(fù)制器”窗口中,單擊圖1.2的...
2025.07.03什么是數(shù)據(jù)的備份與恢復(fù),備份是指數(shù)據(jù)或系統(tǒng)的備份,它是容災(zāi)的基礎(chǔ),是指為防止系統(tǒng)出現(xiàn)操作失誤或故 導(dǎo)致的數(shù)據(jù)丟失,而將全部或部分?jǐn)?shù)據(jù)集合從應(yīng)用主機(jī)的硬盤或陣列復(fù)制到其它存儲介質(zhì)的過程。 容災(zāi)是指...
2025.07.04