为确保数据安全性,mongodb数据备份在实际生产环境下必不可少,一旦生产环境下的mongo所在服务器出现诸如掉电、宕机、甚至是一些不可预测的灾难情况,数据备份就显得尤为重要了,又备份,就有数据恢复
下面就通过实际的案例操作,演示下如何基于mongodb复制集做数据的备份与恢复操作
1、提前搭建好mongodb的复制集群
关于环境搭建,可以参考我的另一篇,有详细的搭建步骤 使用mongoshake同步mongo数据
2、在复制集下创建一个数据库
并给数据库下随机插入一些测试用的数据,本例使用article这个库,在这个库下创建了一个comment的集合,并给该集合随机插入了几条测试数据
数据备份的命令语法
mongodump -h dbhost -d dbname -o dbdirectory
1、全量备份到默认bin目录
这种备份方式会对当前mongodb所有数据库进行备份,如果数据量较大,建议考虑使用一台单独的服务器用于存储这些数据
进入mongodb的bin目录,执行下面的备份命令,使用oplog的方式进行全量备份
./mongodump --host IP:27017 --oplog
备份成功后,默认会在当前目录下生成一个dump的文件夹,里面存储了当前所有的mongo中数据库的数据
2、全量备份到指定目录
上面是备份到默认的bin目录下,下面演示下备份到指定的文件目录,执行下面的命令
./mongodump --host 172.17.0.2:27017 -o /usr/local/soft/mongo/backdump
这时候到backdump目录下,检查是否完成备份
3、备份指定的数据库到默认bin目录
备份articledb数据到当前bin目录下,执行下面的命令
./mongodump -d articledb --host 172.17.0.2:27017 -o ./
4、备份指定的数据库到指定目录
备份articledb数据到指定目录下,执行下面的命令
./mongodump -d articledb --host 172.17.0.2:27017 -o /usr/local/soft/mongo/backdump
实验准备,登录mongodb复制集群的primary节点,删除articledb这个数据库,切换到articledb库,执行下面的删除命令
db.dropDatabase()
1、基于bin目录下的dump文件恢复
进入bin目录,执行如下命令进行恢复
./mongorestore --host 172.17.0.2:27017 --oplogReplay
执行成功后,切换到shell窗口,看看articledb数据库数据是否恢复
1、基于指定目录下的指定数据库dump文件恢复
当然,如果备份的是某个具体的数据库的话,可以只恢复特定的数据,先删除articledb
再执行下面的命令进行恢复
./mongorestore --host 172.17.0.2:27017 -d articledb /usr/local/soft/mongo/backdump/articledb
然后检查数据库articledb数据是否恢复,可以看到,数据已经正常恢复
以上就是本篇的全部内容,实际生产环境中,可能情况略有不同,比如生产环境不是复制集而是分片集,再比如数据恢复的时候并不想全量恢复,而是只恢复某个时间点之后的数据,有兴趣的同学可以进一步深入探究