電腦系統(tǒng)可以備份
很多人平時都沒有備份驅動的習慣,一旦系統(tǒng)崩潰,重裝系統(tǒng)后又要從網(wǎng)上下載新的驅動進行安裝。有一些電腦上可能還裝了一些比較特殊的驅動,去網(wǎng)上也不太好找,怎么辦呢?其實還是有補救的辦法的,我們可以進PE把...
2025.06.30COPYRIGHT ? 2023
粵ICP備2021108052號
郵箱:611661226@qq.com
留言給我作者:張洪
愛可生南區(qū) DBA 團隊成員,主要負責mysql故障處理及相關技術支持。愛好旅游,攝影。
本文來源:原創(chuàng)投稿
* 愛可生開源社區(qū)出品,原創(chuàng)內容未經(jīng)授權不得隨意使用,轉載請聯(lián)系小編并注明來源。
Percona Backup for MongoDB(PBM)是一個針對MongoDB副本集和分片的一致性備份開源工具,它支持邏輯備份、物理備份、增量備份以及選擇性備份和恢復等特性,并且支持Point-in-Time恢復到指定時間點。
但非常可惜的是物理備份相關功能目前僅適用于Percona Server for MongoDB的分支,因此下面主要圍繞邏輯備份與Point-in-Time來展開,MongoDB Community版本要求4.0及以上。
pbm-agent
pbm-agent用于執(zhí)行備份、恢復,刪除和其它操作的進程,它必須運行在集群的每個mongod實例上。包括副本集中的secondary節(jié)點以及分片集群中的config副本集。
所有pbm-agent都會監(jiān)視PBM Control集合的更新,當PBM CLI對PBM Control集合產生更新時,將會在每個副本集上選擇一個secondary上的pbm-agent執(zhí)行操作,如果沒有響應則會選擇Primary上的pbm-agent執(zhí)行操作。
被選中的pbm-agent將會加鎖,避免同時觸發(fā)備份和恢復等互斥操作。操作完成后將會釋放鎖,并更新PBM Control集合
PBM CLI
PBM CLI是一個操作PBM的命令行工具,它使用PBM Control集合與pbm-agent進程通信。通過更新和讀取操作、日志等相應的PBM Control集合來啟動和監(jiān)視備份和恢復操作。同時,它也將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 遠程備份存儲是保存?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é)點都需要存在對應的備份目錄
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é)點對應的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設置到環(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以外進行完整的備份,只需要執(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支持備份壓縮,目前的算法有gzip、zstd、snappy、lz4,通過--compression選項指定。同時能指定對應的壓縮級別,通過--compression-level選項指定。不同算法的壓縮級別如下所示:
壓縮算法 壓縮級別 默認 ztsd 1-4 2 snappy NULL NULL lz4 1-16 1 gzip or pgzip -1,0,1,9 -1
優(yōu)先級
負責備份的pbm-agent默認會在從節(jié)點中隨機選出,規(guī)定時間內從節(jié)點沒有響應,則在主節(jié)點進行備份。現(xiàn)在可以通過指定每個節(jié)點的備份優(yōu)先級來控制備份節(jié)點選擇,避免在一個機器承載多個實例的情況下備份集中在同一臺服務器導致IO性能不足。在配置文件中加入下列配置
backup:priority:"10.186.65.37:27017": 2"10.186.65.37:27018": 1"10.186.65.68:27017": 2
不在配置文件中的節(jié)點優(yōu)先級默認為1,如果沒有設置任何優(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進行查看,有下列選項可選:
# 查看特定備份的日志pbm logs --tail=200 --event=backup/2023-02-22T07:18:40Z# 查看副本集shard1的日志pbm logs -n shard1 -s E
如果正在運行任務想要終止,可以使用pbm canal-backup取消
pbm cancel-backup
刪除快照備份可以使用pbm delete-backup,默認刪除前會進行二次確認,指定--force選項可以直接刪除。刪除oplog chunk可以執(zhí)行pbm delete-pitr
pbm delete-backup --force 2023-02-22T07:18:40Z
如果想要刪除指定時間之前的備份,可以設置--older-than參數(shù),傳遞下列格式的時間戳
Point-in-Time Recovery可以將數(shù)據(jù)還原到指定時間點,期間會從備份快照中恢復數(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事件,如果禁用時間點恢復或因備份快照操作的開始而中斷,則時間可能會更短。oplog保存在遠程存儲的pbmPitr子目錄中,chunk的名稱反映了開始時間和結束時間
如果想要調整時間跨度,可以配置pitr.oplogSpanMin
pbm config --set pitr.oplogSpanMin=5
oplog備份也支持壓縮,可以配置pitr.compression
pbm config --set pitr.compression=gzip
恢復注意事項 通過pbm store命令并指定還原時間戳,在還原之前還需要注意以下幾點:
restore:batchSize: 500numInsertionWorkers: 10
分片集群恢復
分片集群在做恢復前,需要先完成以下步驟
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恢復
pbm restore --time="2023-02-22T08:30:00"
恢復完成后重新啟用PITR和balance進程,并開啟mongos對外提供服務
mongos> sh.startBalancer()pbm config --set pitr.enabled=true
異機恢復
從v1.8版本開始,可以將邏輯備份恢復到具有相同或更多shard的新環(huán)境中,并且這些shard的副本集名稱可以與原環(huán)境不同。但我們需要配置以下映射關系
pbm restore --time="2023-02-22T08:30:00" --replset-remapping="shard1=shard4,shard2=shard5"
pbm提供了性能測試工具pbm-speed-test,默認采用半隨機數(shù)據(jù)進行測試,如果要基于現(xiàn)有集合進行測試,請設置--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)在下列幾個特點:
選擇性備份和恢復功能可以針對指定的數(shù)據(jù)庫或集合,但目前還只是一個實驗性功能,謹慎使用。它具有以下場景選項:
備份指定集合時,需要指定--ns選項,格式為
pbm backup --ns=test.col1
如果要備份整個test數(shù)據(jù)庫,可以改為下列格式
pbm backup --ns=test.*
恢復指定數(shù)據(jù)庫或集合,恢復過程中不會影響現(xiàn)有集群的可用性
pbm restore 2023-02-22T07:18:40Z --ns test.col1
基于時間點恢復數(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
很多人平時都沒有備份驅動的習慣,一旦系統(tǒng)崩潰,重裝系統(tǒng)后又要從網(wǎng)上下載新的驅動進行安裝。有一些電腦上可能還裝了一些比較特殊的驅動,去網(wǎng)上也不太好找,怎么辦呢?其實還是有補救的辦法的,我們可以進PE把...
2025.06.30每經(jīng)AI快訊,電子產品迭代升級速度越來越快,消費者家中的舊手機、舊電腦也越來越多,一鍵刪除、格式化、恢復出廠設置能徹底清除個人數(shù)據(jù),保證信息安全嗎?315信息安全實驗室對此展開了專門的測試,測試表明:...
2025.07.02在Active Directory(AD)環(huán)境中,用戶通過域中的計算機認證他們自身。從AD中刪除這些計算機賬戶時,系統(tǒng)也會自動從域中刪除它們。于是,用戶不能再通過些計算機登錄網(wǎng)絡。為允許用戶訪問域資源...
2025.07.01WinCC操作手冊工程備份及恢復備份步驟注意:在備份前要關閉WINCC。如圖1.1所示步驟,單擊Project Duplicator。圖1.12、在彈出的“WinCC項目復制器”窗口中,單擊圖1.2的...
2025.07.02什么是數(shù)據(jù)的備份與恢復,備份是指數(shù)據(jù)或系統(tǒng)的備份,它是容災的基礎,是指為防止系統(tǒng)出現(xiàn)操作失誤或故 導致的數(shù)據(jù)丟失,而將全部或部分數(shù)據(jù)集合從應用主機的硬盤或陣列復制到其它存儲介質的過程。 容災是指...
2025.07.01