MongoDB备份和恢复

1. mongodb备份
1.1 全库备份
mongodump -uadmin -p123 --port 26060 --authenticationDatabase admin --oplog -o mongodb/full
1.2 备份指定库
mongodump -uadmin -p123 --port 26060 --authenticationDatabase admin -d test -o mongodb/db/
1.3 备份指定库下的指定表
mongodump -uadmin -p123 --port 26060 --authenticationDatabase admin -d test -c log -o mongodb/collection/
1.4 压缩备份:
mongodump -uadmin -p123 --port 26060 --authenticationDatabase admin -d test -o mongodb/db/ --gzip
1.5 导出指定表的指定字段
mongoexport -d dbname -c collectionname -o file --type json/csv -f field
mongoexport -d itcast -c articles -o /home/mongodump/articles.json --type json -f "_id,author,dave,score,views"


2. mongodb恢复
2.1 恢复全库
mongorestore -uadmin -p123 --port 26060 --authenticationDatabase admin --oplogReplay mongodb/full/
2.1 恢复库
mongorestore -uadmin -p123 --port 26060 --authenticationDatabase admin -d test mongodb/full/test/
2.2 恢复表:
mongorestore -uadmin -p123 --port 26060 --authenticationDatabase admin -d test -c log mongodb/collection/test/log.bson
2.3 恢复前删除原始数据(慎用)
mongorestore -uadmin -p123 --port 26060 --authenticationDatabase admin -d test --drop mongodb/full/test/
2.4 导入更新文件
/usr/bin/mongo -u admin -p 'xxx' --authenticationDatabase admin 127.0.0.1:26060/bg < aa.js bg库下执行的脚本
2.5 导入
mongoimport -d dbname -c collectionname --file filename --headerline --type json/csv -f field

3.误操作恢复
"i": insert
"u": update
"d": delete
"c": db cmd
"db":声明当前数据库 (其中ns 被设置成为=>数据库名称+ '.')
"n": no op,即空操作,其会定期执行以确保时效性

3.1 备份mongod中的local库的oplog.rs表
mongodump --port 26060 -uadmin -p --authenticationDatabase admin -d local -c oplog.rs -o /path/dir
3.2 登陆mongo数据库,查找local库中的oplog.rs,定位误操作的位置
mongo --port 26060 -uadmin -p --authenticationDatabase admin
3.3 查看oplog的信息
ty88:PRIMARY> db.getReplicationInfo()
{
"logSizeMB" : 51200, #oplog大小
"usedMB" : 51067.23, #以用大小
"timeDiff" : 136111,
"timeDiffHours" : 37.81, #数据的保存时间,这个值属于预估,根据目前的数据增长结合log大小,预估的值
"tFirst" : "Tue Jul 07 2020 01:37:51 GMT+0800 (CST)",
"tLast" : "Wed Jul 08 2020 15:26:22 GMT+0800 (CST)",
"now" : "Wed Jul 08 2020 15:26:24 GMT+0800 (CST)"
}
ty88:PRIMARY> db.printReplicationInfo()
configured oplog size: 51200MB
log length start to end: 136260secs (37.85hrs)
oplog first event time: Tue Jul 07 2020 01:37:51 GMT+0800 (CST)
oplog last event time: Wed Jul 08 2020 15:28:51 GMT+0800 (CST)
now: Wed Jul 08 2020 15:28:51 GMT+0800 (CST)

3.4 确认操作的时间点,该例子是模拟在误删除后的操作。
my_repl:PRIMARY> use local
db.oplog.rs.find({op:"c"}).pretty();

{
"ts" : Timestamp(1553659908, 1),
"t" : NumberLong(2),
"h" : NumberLong("-7439981700218302504"),
"v" : 2,
"op" : "c",
"ns" : "wo.$cmd",
"ui" : UUID("db70fa45-edde-4945-ade3-747224745725"),
"wall" : ISODate("2019-03-27T04:11:48.890Z"),
"o" : {
"drop" : "ci"
}
}
3.3 通过上面的信息等位到时间戳
"ts" : Timestamp(1553659908, 1),
3.4 通过备份oplog恢复数据,替换完整备份时生成oplog
cp oplog.rs.bson mongodb/full/oplog.bson
3.5 还原数据,跳过上面时间戳的操作
--oplogLimit "1553659908:1" 跳过时间点
mongorestore --port 38021 --oplogReplay --oplogLimit "1553659908:1" --drop /mongodb/backup/

posted @ 2022-05-16 01:28  小毅哥博客  阅读(469)  评论(0编辑  收藏  举报