背景
mongo数据库常用备份还原
工具
1.mongoexport mongoimport
2.mongodump mongorestore
mongoexport/mongoimport与mongodump/mongorestore的对比: mongoexport/mongoimport导入/导出的是JSON格式, 而mongodump/mongorestore导入/导出的是BSON格式。
注意
JSON虽然具有较好的跨版本通用性,但其只保留了数据部分,不保留索引,账户等其他基础信息。使用时应该注意。
JSON可读性强但体积较大,BSON则是二进制文件,体积小但对人几乎没有可读性。
在一些mongodb版本之间,BSON格式可能会随版本不同而有所不同,所以不同版本之间用mongodump/mongorestore可能不会成功,具体要看版本之间的兼容性。
当无法使用BSON进行跨版本的数据迁移的时候,使用JSON格式即mongoexport/mongoimport是一个可选项。跨版本的mongodump/mongorestore并不推荐,(至少4.*命令不支持1.*的备份)
实在要做请先检查文档看两个版本是否兼容。
常用
导出表:
/usr/local/mongodb/bin/mongoexport -u root -p **** --authenticationDatabase admin
-d gold-pre-setting-service -c buyerprices
-o /root/buyerprices.json_bak_20200820 --type json
导入表:
/usr/local/mongodb/bin/mongoimport -h 192.168.3.68 -u root -p **** -
d gold-pre-setting-service --authenticationDatabase admin
--file /root/buyerprices.json
#参数说明
-d, --db=<database-name> # 指定数据库
-c, --collection=<collection-name> # 指定集合
-o, --out=<directory-path> # 指定导出文件保存目录
-u, --username=<username> # 指定连接用户
-p, --password=<password> # 指定连接用户密码
--authenticationDatabase=<database-name> # 指定连接用户验证数据库
--authenticationMechanism=<mechanism> # 指定连接验证机制
-h 指明数据库宿主机的IP
-q 指明导出数据的过滤条件
--authenticationDatabase 验证数据的名称
--gzip 备份时压缩
#创建相应的管理用户
>use admin
>db.createUser(
{
user: "kemeadmin",
pwd: "123456",
roles: [ { role: "root", db: "admin" } ]
}
)
> exit
mongodump
进行全备
mongodump -h 10.0.0.160:27017 -u kemeadmin -p123456 --authenticationDatabase admin -o /data/backup/mongo/full20190611
备份test 库
mongodump -h 10.0.0.160:27017 -u kemeadmin -p123456 --authenticationDatabase admin -d test -o /data/backup/mongo
备份test库下的inventory 集合
mongodump -h 10.0.0.160:27017 -ukemeadmin -p123456 --authenticationDatabase admin -d test -c inventory -o /data/backup/mongo/
压缩备份单个库
mongodump -h 10.0.0.160:27017 -ukemeadmin -p123456 --authenticationDatabase admin -d school -o /data/backup/mongo/ --gzip
压缩备份某个集合也是一样的加上–gzip
mongorestore 恢复
--drop 恢复的时候把之前的集合drop掉(根据场景选择使用)
全库备份中恢复单库(基于之前的全库备份)
从全库中恢复test库
mongorestore -h 10.0.0.160:27017 -ukemeadmin -p123456 --authenticationDatabase admin
-d test --drop /data/backup/mongo/full20190611/test
测试
恢复某个库,不删除之前的集合看看数据有什么变化 (mongorestore恢复时不添加--drop)
原文摘录
做之前删除一条数据,好验证
> use test
switched to db test
> db.test.find()
{ "_id" : ObjectId("5cfdbd4bceada13ff76c3afa"), "name" : "keme", "age" : 18, "ad" : "北京市朝阳区" }
{ "_id" : ObjectId("5cfdbd4bceada13ff76c3afb"), "name" : "xiaoke", "age" : 17, "ad" : "北京市朝阳区" }
{ "_id" : ObjectId("5cfdbd4bceada13ff76c3afc"), "name" : "aaa", "age" : 20, "ad" : "北京市朝阳区" }
{ "_id" : ObjectId("5cff09d8ad4a9f4bf7ffb242"), "name" : "xiaojian", "age" : 20, "ad" : "北京市朝阳区" }
# 删除名字是aaa的数据
> db.test.deleteOne( {"name":"aaa"} )
{ "acknowledged" : true, "deletedCount" : 1 }
> db.test.find()
{ "_id" : ObjectId("5cfdbd4bceada13ff76c3afa"), "name" : "keme", "age" : 18, "ad" : "北京市朝阳区" }
{ "_id" : ObjectId("5cfdbd4bceada13ff76c3afb"), "name" : "xiaoke", "age" : 17, "ad" : "北京市朝阳区" }
{ "_id" : ObjectId("5cff09d8ad4a9f4bf7ffb242"), "name" : "xiaojian", "age" : 20, "ad" : "北京市朝阳区" }
恢复test库,看看有没有aaa这个数据
[root@mongo-160 ~]# mongorestore -h 10.0.0.160:27017 -ukemeadmin -p123456 --authenticationDatabase admin -d test /data/backup/mongo/full20190611/test/
#登录查看
[root@mongo-160 ~]# mongo localhost:27017 -uadmin -p123456
> use test
switched to db test
> db.test.find()
{ "_id" : ObjectId("5cfdbd4bceada13ff76c3afa"), "name" : "keme", "age" : 18, "ad" : "北京市朝阳区" }
{ "_id" : ObjectId("5cfdbd4bceada13ff76c3afb"), "name" : "xiaoke", "age" : 17, "ad" : "北京市朝阳区" }
{ "_id" : ObjectId("5cff09d8ad4a9f4bf7ffb242"), "name" : "xiaojian", "age" : 20, "ad" : "北京市朝阳区" }
{ "_id" : ObjectId("5cfdbd4bceada13ff76c3afc"), "name" : "aaa", "age" : 20, "ad" : "北京市朝阳区" }
ok ,恢复成功
以下RDS备份MongoDB数据 https://help.aliyun.com/document_detail/55008.html?spm=a2c4g.11186623.6.677.4039d6afePr5YU
link
注意事项
当实例的数据库版本为3.2或3.4时,实例中集合加索引的数量需控制在1万以内,
否则可能造成物理备份失败。如果您的业务可能会超过此限制,建议升级数据库版本至4.0及以上,
您也可以在创建实例时选择数据库版本为4.0或4.2。
数据库版本升级后,原版本的MongoDB备份文件无法用于新版本的数据恢复。
本文说明,主要技术内容来自互联网技术大佬的分享,还有一些自我的加工(仅仅起到注释说明的作用)。如有相关疑问,请留言,将确认之后,执行侵权必删