https://www.mongodb.com/docs/database-tools/mongorestore/
针对数据量比较小的情况下是可以全用官方提供的工具来进行备份,大的数据量考虑快照或磁盘类的备份
一、备份:
1、整体备份
mongodump --authenticationDatabase=admin --host 127.0.0.1 --port 27017 --username admin --password 123456 --gzip --out ./clc123
–authenticationDatabase=admin 这个参数最好是要加一下,当你指定库或者集合的时候就会报以下错:
2023-02-21T15:21:10.846+0800Failed: can't create session: could not connect to server: connection() error occurred during connection handshake: auth error: sasl conversation error: unable to authenticate using mechanism "SCRAM-SHA-1": (AuthenticationFailed) Authentication failed.
mongodump --authenticationDatabase=admin --host 127.0.0.1 --port 27017 --username admin --password 123456 -d clc --gzip --out ./clc
[root@centos-node1 tmp]# mongodump --authenticationDatabase=admin --host 127.0.0.1 --port 27017 --username admin --password 123456 -d clc --gzip --out ./clc
2023-02-21T16:21:14.566+0800writing clc.t2 to clc/clc/t2.bson.gz
2023-02-21T16:21:14.569+0800writing clc.t1 to clc/clc/t1.bson.gz
2023-02-21T16:21:14.570+0800done dumping clc.t2 (1 document)
2023-02-21T16:21:14.620+0800done dumping clc.t1 (1 document)
[root@centos-node1 tmp]# tree clc
clc
└── clc
├── t1.bson.gz
├── t1.metadata.json.gz
├── t2.bson.gz
└── t2.metadata.json.gz
1 directory, 4 files
[root@centos-node1 tmp]#
mongodump --authenticationDatabase=admin --host 127.0.0.1 --port 27017 --username admin --password 123456 -d clc -c t1 --gzip --out ./clc_t1
mongorestore --authenticationDatabase=admin --host=127.0.0.1 --port=37017 --username=admin --password=123456 --gzip /tmp/clc123/
指定库如果现在mongodb中没有库的话,会自动创建你指它的库名(–db这个参数的库名),你还原的文件要指定到你备份中的库名目录
mongorestore --authenticationDatabase=admin --host=127.0.0.1 --port=37017 --username=admin --password=123456 --db=newclc --gzip /tmp/clc123/clc
clc库是原来的库名,clcnew是新的库名
admin> use newclc
switched to db newclc
newclc> show collections;
t1
t2
newclc>
–db和–collection参数是还原之后的名字,如果没有的话就会创建新的,还原是需要指定你还原的json文件
mongorestore --authenticationDatabase=admin --host=127.0.0.1 --port=37017 --username=admin --password=123456 --db=newclc_test --collection=table --gzip /tmp/clc123/clc/t2.bson.gz
上面是还原t2集合到新的事例的newclc_test库下的table,新的事例假设没有的话,会新创建
如果新的事例也有同样的集合,目前测试的是增加和覆盖,不会把备份中没有,新的事例上有的删除。
如果_id是一样的会报错,导入失败。
newclc_test> db.table.updateOne({address:'China','sex':'male'},{$set:{address:'HK','sex':'male'}})
{
acknowledged: true,
insertedId: null,
matchedCount: 1,
modifiedCount: 1,
upsertedCount: 0
}
newclc_test> db.table.find();
[
{ _id: ObjectId("63f48259706f466fc8b339bf"), name: 'liudehua' },
{
_id: ObjectId("63f482ff706f466fc8b339c0"),
address: 'xiamen',
sex: 'female'
},
{
_id: ObjectId("63f46fdc9df94ad3566513a4"),
address: 'HK',
sex: 'male'
}
]
原文链接:Mongodb备份与恢复,转载请注明来源!