MongoDB 数据备份和还原
MongoDB数据备份(恢复)的几种方式或工具:
- mongoexport、mongoimport:备份导出格式为
JSON
格式或者CSV
格式;
- mongodump、mongorestore:备份导出格式为
BSON
格式;
JSON可读性强但体积较大,BSON则是二进制文件,体积小但对人类几乎没有可读性。
- Back Up with Filesystem Snapshots
- Back Up with cp or rsync
mongodbexport、mongoimport
mongodbexport
Mongodb中的mongoexport
工具可以把一个collection导出成JSON格式或CSV格式的文件。
可以通过参数指定导出的数据项,也可以根据指定的条件导出数据。
(1)版本差异较大
(2)异构平台数据迁移
mongoexport具体用法如下所示:
备份app库下的vast集合
创建集合并插入数据:
注:备份文件的名字可以自定义,默认导出了JSON格式的数据。
如果我们需要导出CSV格式的数据,则需要使用—-type=csv参数:
mongoimport
Mongodb中的mongoimport
工具可以把一个特定格式文件中的内容导入到指定的collection中。该工具可以导入JSON格式数据,也可以导入CSV格式数据。具体使用如下所示:
示例:先删除vast中的数据,并验证
然后再导入上面导出的vasts.dat文件中的内容
上面演示的是导入JSON格式的文件中的内容,如果要导入CSV格式文件中的内容,则需要通过–type参数指定导入格式,具体如下所示:
先删除数据
再导入之前导出的vast.csv文件
错误的恢复
mongodump、mongorestore
mongodump能够在Mongodb运行时进行备份,它的工作原理是对运行的Mongodb做查询,然后将所有查到的文档写入磁盘。但是存在的问题时使用mongodump产生的备份不一定是数据库的实时快照,如果我们在备份时对数据库进行了写入操作,则备份出来的文件可能不完全和Mongodb实时数据相等。另外在备份时可能会对其它客户端性能产生不利的影响。
mongodump
命令参数:
基础使用:
mongorestore
命令格式:
基础使用:
:warning:注意:
1、如果要恢复的表已经存在,可以添加--drop
,自动删除原表
2、如果有用户验证,需要使用root或者需要备份的对象有权限的用户才可以
直接拷贝或快照数据文件
这个备份数据库最最简单的方案,你可以将 data/
里的所有文件一并复制到任意安全的地方,在复制之前应先停止对数据库的写入操作,以保证数据一致性。使用 db.fsyncLock()
命令停止写入操作。
拷贝数据文件
直接拷贝文件系统中的数据文件。
:warning:需要特别注意的一点是:备份复制产生的底层数据不支持时间点恢复副本集和难以管理对于较大的分片集群(sharded-cluster)。此外,这些备份更大,因为它们包括索引和复制底层存储填充和碎片。相比之下,mongodump创建占空间更小的备份。
因此不推荐使用该备份方式。
使用系统快照备份
参考: https://docs.mongodb.com/manual/tutorial/backup-with-filesystem-snapshots/
附录:定期备份脚本
参考链接