首页 » Mongodb » Mongodb备份与恢复

Mongodb备份与恢复

 

官方文档:

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.

2、指定库备份

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]#

3、指定库下的集合备份

mongodump --authenticationDatabase=admin --host 127.0.0.1 --port 27017 --username admin --password 123456 -d clc -c t1 --gzip --out ./clc_t1

二、还原

1、还原全库

mongorestore --authenticationDatabase=admin --host=127.0.0.1 --port=37017 --username=admin --password=123456  --gzip /tmp/clc123/

2、还原指定库并改库名

指定库如果现在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> 

3、还原指定的库下的指定的集合

–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备份与恢复,转载请注明来源!

0