MongoDB备份与恢复

关于Mongodump的命令使用方法,大家可以mongodump --help去查看,常用选项如下:

-p,--port:端口
-h,--host:IP地址
-d,--db:数据库
-c,--collection:备份的集合名称
-q,--query:备份数据的条件表达式
-o,--out:备份文件的存放位置
-u,--username:用户名
-p,--password:密码
--authenticationDataBase:认证数据库

具体的使用方法,下面有例子。

2、Monogorestore工具

数据备份和数据恢复二者是不可分割的,因为数据的备份,本质上还是为了恢复准备的,如果备份的数据不能恢复,那么备份也就失去了意义。

    在MongoDB中,Mongorestore这个工具是用来做数据恢复的,数据恢复命令的常用参数如下:

与mongodump重复的部分不再赘述
-p,--port
-h,--host
-d,--db
-c,--collection
--dir:恢复文件存放的位置,如果指定了数据库文件夹或者集合文件,则只恢复当前数据库或者当前集合,如果没有指定,则恢复当前目录下所有备份数据。
--drop:恢复前会删除已有的数据库
-u,--user
-p,--password
--authenticationDatabase

下面来看样例:
数据备份举例

备份所有数据库
mongodump   --port=27017 -h 127.0.0.1   -o /data/mongodb_backup  -u tigerfive -p 123456      
2020-11-23T23:40:41.599+0800    writing admin.system.users to 
2020-11-23T23:40:41.626+0800    done dumping admin.system.users (3 documents)
2020-11-23T23:40:41.626+0800    writing admin.system.roles to 
2020-11-23T23:40:41.651+0800    done dumping admin.system.roles (1 document)
2020-11-23T23:40:41.651+0800    writing admin.system.version to 
2020-11-23T23:40:41.680+0800    done dumping admin.system.version (2 documents)
2020-11-23T23:40:41.680+0800    writing test.yeyz to 
2020-11-23T23:40:41.680+0800    writing yeyz.test to 
2020-11-23T23:40:41.726+0800    done dumping yeyz.test (2 documents)
2020-11-23T23:40:41.727+0800    done dumping test.yeyz (3 documents)

备份yeyz这一个数据库
[root@VM-0-14-centos ~]# mongodump  -d yeyz --port=27017 -h 127.0.0.1   -o /data/mongodb_backup  -u tigerfive -p 123456 --authenticationDatabase admin                  
2020-11-23T23:41:58.991+0800    writing yeyz.test to 
2020-11-23T23:41:59.050+0800    done dumping yeyz.test (2 documents)

备份yeyz数据库中的test集合中的name=ccc的记录
[root@VM-0-14-centos ~]# mongodump  -d yeyz -c test -q '{name:{$eq:"ccc"}}' --port=27017 -h 127.0.0.1   -o /data/mongodb_backup  -u tigerfive -p 123456 --authenticationDatabase admin
2020-11-23T23:43:24.473+0800    writing yeyz.test to 
2020-11-23T23:43:24.501+0800    done dumping yeyz.test (1 document)

数据恢复举例

恢复前
> use yeyz
switched to db yeyz
> show tables;
test
> db.test.find()
{ "_id" : ObjectId("5fa7eae2515b814f18f2d474"), "name" : "ccc" }
{ "_id" : ObjectId("5fa7f00e523d80402cdfa326"), "name" : "bbb" }

恢复后
> show tables;
test
test_recover
> db.test_recover.find()
{ "_id" : ObjectId("5fa7eae2515b814f18f2d474"), "name" : "ccc" }

我们成功的将上面的yeyz数据库中的test集合中的name=ccc的记录恢复到了test_recover这个集合当中。

3、mongoexport导出工具

Mongodb中的mongoexport工具可以把一个collection导出成JSON格式或CSV格式的文件。可以通过参数指定导出的数据项,也可以根据指定的条件导出数据。

该命令的参数如下:

参数参数说明
-h指明数据库宿主机的IP
-u指明数据库的用户名
-p指明数据库的密码
-d指明数据库的名字
-c指明collection的名字
-f指明要导出那些列
-o指明到要导出的文件名
-q指明导出数据的过滤条件
–type指定文件类型
–authenticationDatabase验证数据的名称

mongoexport****备份实践

备份app库下的vast集合

mongoexport -h 10.0.0.152:27017 -u tigerfive -p 123456 --authenticationDatabase admin -d app -c vast -o /home/mongod/backup/vasts.dat

注:备份文件的名字可以自定义,默认导出了JSON格式的数据。

导出CSV格式的数据

mongoexport -h 10.0.0.152:27017 -u tigerfive -p 123456 --authenticationDatabase admin  -d app -c vast --type=csv -f id,name -o /home/mongod/backup/vast_csv.dat

4、mongoimport导入工具

Mongodb中的mongoimport工具可以把一个特定格式文件中的内容导入到指定的collection中。该工具可以导入JSON格式数据,也可以导入CSV格式数据。

该命令的参数如下:

参数参数说明
-h指明数据库宿主机的IP
-u指明数据库的用户名
-p指明数据库的密码
-d指明数据库的名字
-c指明collection的名字
-f指明要导出那些列
-o指明到要导出的文件名
-q指明导出数据的过滤条件
–drop插入之前先删除原有的
–headerline指明第一行是列名,不需要导入。
-j同时运行的插入操作数(默认为1),并行
–authenticationDatabase验证数据的名称

mongoimport****恢复实践

将之前恢复的数据导入

mongoimport -h 10.0.0.152:27017 -u tigerfive -p 123456 --authenticationDatabase admin  -d app -c vast  --drop /home/mongod/backup/vasts.dat

将之前恢复的CSV格式数据导入

mongoimport -h 10.0.0.152:27017 -u tigerfive -p 123456 --authenticationDatabase admin -d app -c vast --type=csv --headerline --file vast_csv.dat

5、物理备份

物理备份的概念大家应该都理解,常用的方法是复制物理硬盘上的数据库文件。

想要保证复制的物理文件和真实的数据库文件一致,需要保证当前数据库没有写入。如果数据库有写入,则复制的数据是不准确的。所以,物理复制必须在MongoDB实例停机状态或者锁定状态下进行。一般来讲,在MongoDB集群中,我们会使用锁定从库的办法来进行备份。

通常情况下,使用:

db.fsyncLock()  锁定从数据库。
db.fsyncUnlock() 解锁数据库

锁定从节点的数据库之后,在从节点上使用物理文件拷贝的方式进行备份即可。
备份完成即可解锁数据库。

最后,数据备份的时候,如果有写入,那么备份的数据是否会不准确?例如下面这样:

图片

图片

如果我们的备份进度处在中间位置,即:

A库备份完成的时候,B库没有开始备份

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值