暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MongoDB 备份工具 PBM 探究

原创 flywiththewind 2022-07-13
2808

1、说明

Percona Backup for MongoDB是一个分布式、低影响的解决方案,用于实现MongoDB分片集群和副本集的一致备份。

从1.7.0版本开始,Percona Backup for MongoDB同时支持物理和逻辑备份和恢复。当前仅逻辑备份支持时间点恢复。


2、软件版本


percona-server-mongodb-5.0.9-8-x86_64.glibc2.17.tar.gz

percona-backup-mongodb-1.8.0-x86_64.tar.gz


3、数据库安装


tar -zxvf percona-server-mongodb-5.0.9-8-x86_64.glibc2.17.tar.gz

ln -s /soft/percona-server-mongodb-5.0.9-8-x86_64.glibc2.17 /usr/local/perconamongo


4、数据库启动

mkdir /root/mongokeyfile
cd /root/mongokeyfile
openssl rand -base64 753 > KeyFile.key
chmod 600 keyFile.key

/usr/local/perconamongo/mongod --port 10000 --maxConns 100 --pidfilepath /perconamongo/pid/mongod.pid --fork --logpath /perconamongo/log/mongod.log --logRotate rename --bind_ip_all --slowms 100 --dbpath /perconamongo/data --directoryperdb --journal --oplogMinRetentionHours 1 --wiredTigerCacheSizeGB 0.5 --wiredTigerCheckpointSizeMB 100 --wiredTigerDirectoryForIndexes --oplogSize 100 --replSet perconars0 --keyFile /root/mongokeyfile/KeyFile.key


5、创建用户

/usr/local/perconamongo/mongo --port 10000

use admin
db.createUser({
user:"root",
pwd:"root",
roles: [{ role: "root",db:"admin"}]
})

6、创建备份用户

/usr/local/perconamongo/mongo --port 10000 -uroot -proot --authenticationDatabase admin

db.getSiblingDB("admin").createRole({ "role": "pbmAnyAction",
"privileges": [
{ "resource": { "anyResource": true },
"actions": [ "anyAction" ]
}
],
"roles": []
});


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" }
]
});

7、安装备份软件

tar -zxvf percona-backup-mongodb-1.8.0-x86_64.tar.gz

cd percona-backup-mongodb-1.8.0

8、配置环境变量


export PBM_MONGODB_URI="mongodb://pbmuser:secretpwd@localhost:10000/?authSource=admin&replSetName=perconars0"

cat>> pbm_config.yaml<<EOF

storage:
type: filesystem
filesystem:
path: /percona/backup

EOF

./pbm config --file pbm_config.yaml

./pbm status

9、配置PITR

./pbm config --set pitr.enabled=true

./pbm config --set pitr.compression=gzip

./pbm config --set pitr.oplogSpanMin=5

./pbm config --list


10、启动pbm_agent

nohup ./pbm-agent &


11、模拟持续业务


for (var i = 0; i < 10000; i++) {
var identificationTime = "2021"+"-0"+Math.ceil(Math.random()*9)+"-"+(Math.ceil(Math.random()*19)+9)+" "+(Math.ceil(Math.random()*14)+9)+":"+(Math.ceil(Math.random()*50)+9)+":"+(Math.ceil(Math.random()*50)+9);
var createDate = identificationTime.split(" ")[0];
db.getCollection("emps").insert( {
jkmRecordId: "61b16f60bcc4352712003135"+i,
regionName: i+"godisagirl"+i,
snapUrl: "http://124.70.17.117:27777/file/down/202112-956720a45c4c416799aa1a82fb45b4fd.jpg",
recognizeFlag: Math.ceil(Math.random()*2) === 1 ? true : false,
deviceSn: String(456),
deviceName: i+"orgodisaboy"+i,
cardNo: "3412**********0458",
uuid: NumberLong("1468775476498")+i,
collectionName: "test-station4",
personName: i+"whoareyou"+i,
faceUrl: "http://124.70.17.117:27777/file/down/202112-6ca108039006464c8a7af138c0301b07.jpg",
areaCheckCode: "1",
regionId: "784"+i,
phone: i+"0"+i,
similarity: "85"+i,
customerId: "9516303150"+i,
temperature: Math.ceil(Math.random()*2)+34,
identificationTime: identificationTime,
inoutType: NumberInt("0"),
verifyType: "0",
status: (Math.ceil(Math.random()*3)-1),
createDate: createDate,
personType: "3",
dbIndex: "test-station4"
} );
}

12、开启备份

./pbm backup


13、查看备份

./pbm list


14、模拟删除数据库

use testdb

db.dropDatabase()


15、恢复数据库

./pbm config --set pitr.enabled=false

./pbm restore --time="2022-07-13T03:10:14"


16、查看恢复日志

tail -f nohup.out


17、参考文档

https://docs.percona.com/percona-backup-mongodb/intro.html


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论