8. 备份恢复-mongodump
1. 备份工具mongodump介绍¶
#1.mongodump能够在mongodb运行时进行备份
#2.它的工作原理是对运行的mongodb做查询,然后将所有查到的文档写入磁盘。
#3.但存在的问题是,使用mongodump产生的备份不一定是数据库的实时快照,如果我们在备份时,对数据库进行了写入操作,则备份出来的文件可能不完全和mongodb实时数据相等。
#4.另外,在备份时可能会对其他客户端性能产生不利的影响。
2. mongodump参数说明¶
$mongodump --help
-h:IP
-u:用户名
-p:密码
--port:端口
--authenticationDatabase admin #指明验证库
-d:库名
-c:集合名
-o:导出的路径
-q:指明导出数据的过滤条件
-j,--numParallelCollections=number of collections to dump in parallel (4 by default) #此行数据不知道干啥的。
--oplog #备份的同时备份oplog
3. 全库备份¶
mkdir /mongodb/backup -p
mongodump -uroot -proot123 --port 27017 --authenticationDatabase admin -o /mongodb/backup
[mongod@151 ~]$ mkdir /mongodb/backup -p
[mongod@151 ~]$
[mongod@151 ~]$ mongodump -uroot -proot123 --port 27017 --authenticationDatabase admin -o /mongodb/backup
2021-05-13T14:49:31.202+0800 writing admin.system.users to
2021-05-13T14:49:31.204+0800 done dumping admin.system.users (3 documents)
2021-05-13T14:49:31.204+0800 writing admin.system.version to
2021-05-13T14:49:31.206+0800 done dumping admin.system.version (1 document)
2021-05-13T14:49:31.206+0800 writing oldboy.log1 to
2021-05-13T14:49:31.207+0800 writing oldboy.log4 to
2021-05-13T14:49:31.207+0800 writing oldboy.log2 to
2021-05-13T14:49:31.208+0800 writing app.log to
2021-05-13T14:49:31.725+0800 done dumping app.log (10000 documents)
2021-05-13T14:49:31.725+0800 writing oldboy.log3 to
2021-05-13T14:49:31.766+0800 done dumping oldboy.log4 (10001 documents)
2021-05-13T14:49:31.767+0800 writing world.city to
2021-05-13T14:49:31.811+0800 done dumping world.city (4079 documents)
2021-05-13T14:49:31.811+0800 writing app.b to
2021-05-13T14:49:31.914+0800 done dumping app.b (1 document)
2021-05-13T14:49:31.914+0800 writing test.t1 to
2021-05-13T14:49:31.920+0800 done dumping oldboy.log2 (10000 documents)
2021-05-13T14:49:31.920+0800 writing app.a to
2021-05-13T14:49:31.934+0800 done dumping test.t1 (1 document)
2021-05-13T14:49:31.934+0800 done dumping app.a (1 document)
2021-05-13T14:49:32.065+0800 done dumping oldboy.log3 (10000 documents)
2021-05-13T14:49:32.141+0800 done dumping oldboy.log1 (20000 documents)
[mongod@151 ~]$
[mongod@151 ~]$
[mongod@151 ~]$ ls /mongodb/backup/
admin app oldboy test world
[mongod@151 ~]$
[mongod@151 ~]$ ls /mongodb/backup/oldboy/
log1.bson log2.bson log3.bson log4.bson
log1.metadata.json log2.metadata.json log3.metadata.json log4.metadata.json
[mongod@151 ~]$
4. 单库备份¶
mongodump -uroot -proot123 --port 27017 --authenticationDatabase admin -d test -o /mongodb/backup
[mongod@151 ~]$ rm -rf /mongodb/backup/*
[mongod@151 ~]$
[mongod@151 ~]$ ls /mongodb/backup/
[mongod@151 ~]$
[mongod@151 ~]$ mongodump -uroot -proot123 --port 27017 --authenticationDatabase admin -d test -o /mongodb/backup
2021-05-13T14:51:18.886+0800 writing test.t1 to
2021-05-13T14:51:18.888+0800 done dumping test.t1 (1 document)
[mongod@151 ~]$
[mongod@151 ~]$ ls /mongodb/backup/
test
[mongod@151 ~]$
[mongod@151 ~]$ ls /mongodb/backup/test/
t1.bson t1.metadata.json
5. 单表备份¶
mongodump -uroot -proot123 --port 27017 --authenticationDatabase admin -d world -c city -o /mongodb/backup
[mongod@151 ~]$ rm -rf /mongodb/backup/*
[mongod@151 ~]$
[mongod@151 ~]$ ls /mongodb/backup/
[mongod@151 ~]$
[mongod@151 ~]$ mongodump -uroot -proot123 --port 27017 --authenticationDatabase admin -d world -c city -o /mongodb/backup
2021-05-13T14:52:10.053+0800 writing world.city to
2021-05-13T14:52:10.070+0800 done dumping world.city (4079 documents)
[mongod@151 ~]$
[mongod@151 ~]$ ls /mongodb/backup/
world
[mongod@151 ~]$
[mongod@151 ~]$ ls /mongodb/backup/world/
city.bson city.metadata.json
6. 压缩备份单库¶
mongodump -uroot -proot123 --port 27017 --authenticationDatabase admin -d app -o /mongodb/backup --gzip
[mongod@151 ~]$ rm -rf /mongodb/backup/*
[mongod@151 ~]$
[mongod@151 ~]$ ls /mongodb/backup/
[mongod@151 ~]$
[mongod@151 ~]$ mongodump -uroot -proot123 --port 27017 --authenticationDatabase admin -d app -o /mongodb/backup --gzip
2021-05-13T14:53:00.274+0800 writing app.log to
2021-05-13T14:53:00.275+0800 writing app.b to
2021-05-13T14:53:00.276+0800 writing app.a to
2021-05-13T14:53:00.336+0800 done dumping app.log (10000 documents)
2021-05-13T14:53:00.337+0800 done dumping app.b (1 document)
2021-05-13T14:53:00.340+0800 done dumping app.a (1 document)
[mongod@151 ~]$
[mongod@151 ~]$ ls /mongodb/backup/
app
[mongod@151 ~]$
[mongod@151 ~]$ ls /mongodb/backup/app/
a.bson.gz a.metadata.json.gz b.bson.gz b.metadata.json.gz log.bson.gz log.metadata.json.gz
[mongod@151 ~]$
7. 压缩备份单表¶
mongodump -uroot -proot123 --port 27017 --authenticationDatabase admin -d oldboy -c log -o /mongodb/backup --gzip
[mongod@151 ~]$ rm -rf /mongodb/backup/*
[mongod@151 ~]$
[mongod@151 ~]$ ls /mongodb/backup
[mongod@151 ~]$
[mongod@151 ~]$ mongodump -uroot -proot123 --port 27017 --authenticationDatabase admin -d oldboy -c log -o /mongodb/backup --gzip
2021-05-13T14:54:05.450+0800 the collection oldboy.log appears to have been dropped after the dump started
2021-05-13T14:54:05.450+0800 writing oldboy.log to
2021-05-13T14:54:05.453+0800 done dumping oldboy.log (0 documents)
[mongod@151 ~]$
[mongod@151 ~]$ ls /mongodb/backup
oldboy
[mongod@151 ~]$
[mongod@151 ~]$ ls /mongodb/backup/oldboy/
log.bson.gz
8. 恢复工具mongorestore(参数与mongodump基本一致)¶
#与备份工具参数基本一样
--drop #删除原来的库
9. 恢复单库¶
#恢复world到world1
mongorestore -uroot -proot123 --port 27017 --authenticationDatabase admin -d world1 /mongodb/backup/world
[mongod@151 ~]$ rm -rf /mongodb/backup/*
[mongod@151 ~]$
[mongod@151 ~]$ ls /mongodb/backup/
[mongod@151 ~]$
[mongod@151 ~]$ mongodump -uroot -proot123 --port 27017 --authenticationDatabase admin -o /mongodb/backup
2021-05-13T14:55:33.252+0800 writing admin.system.users to
2021-05-13T14:55:33.254+0800 done dumping admin.system.users (3 documents)
2021-05-13T14:55:33.254+0800 writing admin.system.version to
2021-05-13T14:55:33.255+0800 done dumping admin.system.version (1 document)
2021-05-13T14:55:33.255+0800 writing oldboy.log1 to
2021-05-13T14:55:33.256+0800 writing oldboy.log4 to
2021-05-13T14:55:33.256+0800 writing oldboy.log2 to
2021-05-13T14:55:33.257+0800 writing app.log to
2021-05-13T14:55:33.339+0800 done dumping oldboy.log4 (10001 documents)
2021-05-13T14:55:33.339+0800 writing oldboy.log3 to
2021-05-13T14:55:33.371+0800 done dumping oldboy.log1 (20000 documents)
2021-05-13T14:55:33.371+0800 writing world.city to
2021-05-13T14:55:33.415+0800 done dumping oldboy.log3 (10000 documents)
2021-05-13T14:55:33.415+0800 writing app.b to
2021-05-13T14:55:33.438+0800 done dumping world.city (4079 documents)
2021-05-13T14:55:33.438+0800 writing test.t1 to
2021-05-13T14:55:33.470+0800 done dumping oldboy.log2 (10000 documents)
2021-05-13T14:55:33.470+0800 writing app.a to
2021-05-13T14:55:33.502+0800 done dumping app.log (10000 documents)
2021-05-13T14:55:33.502+0800 done dumping app.b (1 document)
2021-05-13T14:55:33.502+0800 done dumping test.t1 (1 document)
2021-05-13T14:55:33.504+0800 done dumping app.a (1 document)
[mongod@151 ~]$
[mongod@151 ~]$ ls /mongodb/backup/
admin app oldboy test world
#恢复单库
[mongod@151 ~]$ mongorestore -uroot -proot123 --port 27017 --authenticationDatabase admin -d world1 /mongodb/backup/world
2021-05-13T14:56:10.143+0800 building a list of collections to restore from /mongodb/backup/world dir
2021-05-13T14:56:10.144+0800 reading metadata for world1.city from /mongodb/backup/world/city.metadata.json
2021-05-13T14:56:10.156+0800 restoring world1.city from /mongodb/backup/world/city.bson
2021-05-13T14:56:10.319+0800 restoring indexes for collection world1.city from metadata
2021-05-13T14:56:10.320+0800 finished restoring world1.city (4079 documents)
2021-05-13T14:56:10.320+0800 done
[mongod@151 ~]$
#登录查看
[mongod@151 ~]$ mongo -uroot -proot123 admin
MongoDB shell version: 3.2.22
connecting to: admin
>
> show dbs
admin 0.000GB
app 0.000GB
local 0.000GB
oldboy 0.002GB
test 0.000GB
world 0.000GB
world1 0.000GB
>
> use world1
switched to db world1
>
> show tables
city
>
> exit
bye
10. 恢复压缩的单表¶
#恢复oldguo.t1
mongorestore -uroot -proot123 --port 27017 --authenticationDatabase admin -d oldboy1 -c t1 --gzip /mongodb/backup/oldboy/log.bson.gz
#1.创建压缩备份
[mongod@151 ~]$ rm -rf /mongodb/backup/*
[mongod@151 ~]$
[mongod@151 ~]$ ls /mongodb/backup/
[mongod@151 ~]$
[mongod@151 ~]$ mongodump -uroot -proot123 --port 27017 --authenticationDatabase admin -d oldboy -c log -o /mongodb/backup --gzip
2021-05-13T14:59:04.300+0800 the collection oldboy.log appears to have been dropped after the dump started
2021-05-13T14:59:04.300+0800 writing oldboy.log to
2021-05-13T14:59:04.302+0800 done dumping oldboy.log (0 documents)
[mongod@151 ~]$
[mongod@151 ~]$ ls /mongodb/backup/
oldboy
[mongod@151 ~]$ ls /mongodb/backup/oldboy/
log.bson.gz
#2.恢复单表
[mongod@151 ~]$ mongorestore -uroot -proot123 --port 27017 --authenticationDatabase admin -d oldboy1 -c t1 --gzip /mongodb/backup/oldboy/log.bson.gz
2021-05-13T15:00:37.667+0800 checking for collection data in /mongodb/backup/oldboy/log.bson.gz
2021-05-13T15:00:37.677+0800 restoring oldboy1.t1 from /mongodb/backup/oldboy/log.bson.gz
2021-05-13T15:00:37.749+0800 no indexes to restore
2021-05-13T15:00:37.749+0800 finished restoring oldboy1.t1 (0 documents)
2021-05-13T15:00:37.749+0800 done
[mongod@151 ~]$
#3.登录查看
[mongod@151 ~]$ mongo -uroot -proot123 admin
MongoDB shell version: 3.2.22
connecting to: admin
>
> show dbs
admin 0.000GB
app 0.000GB
local 0.000GB
oldboy 0.002GB
oldboy1 0.000GB
test 0.000GB
world 0.000GB
world1 0.000GB
>
> use oldboy1
switched to db oldboy1
>
> show tables
t1
>
> db.t1.count()
0
> exit
bye
11. 恢复到原来的库,删除之前的库¶
#恢复时,强制删除以前的库
mongorestore -uroot -proot123 --port 27017 --authenticationDatabase admin -d world --drop /mongodb/backup/world
#验证得知,--drop是删除 /mongodb/backup/world 目录中有的表,表信息更改,恢复后数据丢失,如果新建的表,则删除不了,恢复后信标还在!!!
#1.创建全库备份
[mongod@151 ~]$ rm -rf /mongodb/backup/*
[mongod@151 ~]$
[mongod@151 ~]$ ls /mongodb/backup/
[mongod@151 ~]$
[mongod@151 ~]$ mongodump -uroot -proot123 --port 27017 --authenticationDatabase admin -o /mongodb/backup
2021-05-13T15:16:11.854+0800 writing admin.system.users to
2021-05-13T15:16:11.856+0800 done dumping admin.system.users (3 documents)
2021-05-13T15:16:11.856+0800 writing admin.system.version to
2021-05-13T15:16:11.857+0800 done dumping admin.system.version (1 document)
2021-05-13T15:16:11.857+0800 writing oldboy.log1 to
2021-05-13T15:16:11.859+0800 writing oldboy.log4 to
2021-05-13T15:16:11.860+0800 writing oldboy.log2 to
2021-05-13T15:16:11.860+0800 writing app.log to
2021-05-13T15:16:12.084+0800 done dumping app.log (10000 documents)
2021-05-13T15:16:12.085+0800 writing oldboy.log3 to
2021-05-13T15:16:12.187+0800 done dumping oldboy.log2 (10000 documents)
2021-05-13T15:16:12.187+0800 writing world.city to
2021-05-13T15:16:12.210+0800 done dumping oldboy.log4 (10001 documents)
2021-05-13T15:16:12.211+0800 writing world1.city to
2021-05-13T15:16:12.321+0800 done dumping world1.city (4079 documents)
2021-05-13T15:16:12.321+0800 writing app.a to
2021-05-13T15:16:12.367+0800 done dumping world.city (4079 documents)
2021-05-13T15:16:12.368+0800 writing app.b to
2021-05-13T15:16:12.390+0800 done dumping oldboy.log1 (20000 documents)
2021-05-13T15:16:12.390+0800 writing test.t1 to
2021-05-13T15:16:12.390+0800 done dumping app.a (1 document)
2021-05-13T15:16:12.391+0800 writing oldboy1.t1 to
2021-05-13T15:16:12.404+0800 done dumping oldboy.log3 (10000 documents)
2021-05-13T15:16:12.404+0800 done dumping app.b (1 document)
2021-05-13T15:16:12.406+0800 done dumping test.t1 (1 document)
2021-05-13T15:16:12.406+0800 done dumping oldboy1.t1 (0 documents)
[mongod@151 ~]$
[mongod@151 ~]$ ls /mongodb/backup/
admin app oldboy oldboy1 test world world1
[mongod@151 ~]$ ls /mongodb/backup/world
city.bson city.metadata.json
#2.在world库下新加几张表
[mongod@151 ~]$ mongo -uroot -proot123 admin
MongoDB shell version: 3.2.22
connecting to: admin
>
> use world
switched to db world
>
> show tables
city
>
> db.t1.insert({id:1})
WriteResult({ "nInserted" : 1 })
>
> db.t2.insert({id:1})
WriteResult({ "nInserted" : 1 })
>
> show tables
city
t1
t2
>
> exit
bye
#3.恢复world库,并删除原来的库
[mongod@151 ~]$ mongorestore -uroot -proot123 --port 27017 --authenticationDatabase admin -d world --drop /mongodb/backup/world
2021-05-13T15:18:41.878+0800 building a list of collections to restore from /mongodb/backup/world dir
2021-05-13T15:18:41.883+0800 reading metadata for world.city from /mongodb/backup/world/city.metadata.json
2021-05-13T15:18:41.895+0800 restoring world.city from /mongodb/backup/world/city.bson
2021-05-13T15:18:42.059+0800 restoring indexes for collection world.city from metadata
2021-05-13T15:18:42.060+0800 finished restoring world.city (4079 documents)
2021-05-13T15:18:42.060+0800 done
#4.再次登录,查看world库
[mongod@151 ~]$ mongo -uroot -proot123 admin
MongoDB shell version: 3.2.22
connecting to: admin
>
> use world
switched to db world
>
> show tables
city
t1
t2
#失败。分析,应该是因为还原的表,所以没有删除库里面其他的信息,--drop应该是删除原来的表。再次修改表信息
> db.city.insert({id:00001})
WriteResult({ "nInserted" : 1 })
>
> db.city.insert({id:00002})
WriteResult({ "nInserted" : 1 })
>
> db.city.count()
4081
>
> exit
bye
#5.再次还原后,查看表中数据
[mongod@151 ~]$ mongorestore -uroot -proot123 --port 27017 --authenticationDatabase admin -d world --drop /mongodb/backup/world
2021-05-13T15:21:49.471+0800 building a list of collections to restore from /mongodb/backup/world dir
2021-05-13T15:21:49.474+0800 reading metadata for world.city from /mongodb/backup/world/city.metadata.json
2021-05-13T15:21:49.483+0800 restoring world.city from /mongodb/backup/world/city.bson
2021-05-13T15:21:49.648+0800 restoring indexes for collection world.city from metadata
2021-05-13T15:21:49.649+0800 finished restoring world.city (4079 documents)
2021-05-13T15:21:49.649+0800 done
[mongod@151 ~]$
[mongod@151 ~]$ mongo -uroot -proot123 admin
MongoDB shell version: 3.2.22
connecting to: admin
>
> use world
switched to db world
>
> show tables
city
t1
t2
>
> db.city.count()
4079
>
> exit
bye
#成功!!!
12. 恢复到原来的表,删除原来的表(见上一条!略)¶
mongorestore -uroot -proot123 --port 27017 --authenticationDatabase admin -d app -c vast --drop /mongodb/backup/app/vast.bson
最后更新:
2022-02-20 11:21:58