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




