MongoDB备份与还原mongodump、mongorestore

MongoDB 导出备份

1、mongodump 简介

mongodump 是 MongoDB 官方提供的备份工具,它可以从 MongoDB 数据库读取数据,并生成 BSON 文件,mongodump 适合用于备份和恢复数据量较小的 MongoDB 数据库,不适用于大数据量备份。
默认情况下 mongodump 不获取 local 数据库里面的内容。
mongodump 仅备份数据库中的文档,不备份索引,所以我们还原后,需要重新生成索引。
**mongodump 备份过程中会对 mongod 服务的性能产生影响,我们建议在业务低峰期进行操作。**如果我们备份的数据,大于系统内存,我们备份的时候容易出现错误。

**在执行 mongodump 的时候,mongod 服务还是可以提供服务的,**可以进行修改数据,如果我们在备份的时候加上参数 --oplog 的话,那么 oplog 是会记录这一次操作的,如果我们想在 restore 的时候也有日志记录,我们可以使用 mongorestore --oplogReplay 进行恢复

2、mongodump 常用命令和参数

mongodump 默认输出的目录名为 dump ,如果输出路径包含 dump 目录,会直接覆盖的。 默认备份是没有压缩的。

参数:
-d # 指定备份的数据库,未指定的话,备份所有的数据库,但不包含 local 库
-c # 指定备份的集合,未指定则备份指定库中的所有集合。
-q # 指定 json 作为查询条件。来备份我们过滤后的数据。
--gzip # 开启压缩,3.2 版本后可以使用,输出为文件的话会带有后缀.gz
-o # 输出的目录路径

示例:
mongodump -h host/ip -P 37017 -u user -p "pass" --gzip --out /opt/backup/mongodump-2019-04-17

3、查看备份数据

我们部分的数据都是二进制的,我们直接查看是查看不到的,那么我们可以通过工具 bsondump(安装 MongoDB 自带了) 来进行查看。

[root@djx uu_dev]# bsondump  order_detail.bson

MongoDB 还原

1、mongorestore 特点

mongorestore 可以创建新的数据库或将数据添加到现有的数据库,但是 mongorestore 仅仅执行 insert 操作,不执行 update 操作。这就意味着如果将文档还原到现有的数据库,现有的数据库中的文档的 id 的值和要还原的文档中的id 值是一样的,是不会将数据库原有的值覆盖的。重建索引,mongorestore 会重建索引。
mongorestore 不恢复 system.profile 的数据

2、mongorestore 常用参数

--help # 查看帮助
--quiet # 通过抑制 MongoDB 的复制,连接等活动,来实现数据恢复。
-h <:port> # 指定恢复的主机 ip 和端口号,默认值 localhost:27017
-u # 指定用户名
-p # 指定密码
--gzip # 从压缩文档中 恢复。
--archive # 从归档文件中恢复。
--dir # 指定还原数据储存目录。

3、还原示例

mongorestore --collection people --db accounts dump/
mongorestore --host mongodb1.example.net --port 37017 --username user --password "pass" /opt/backup/mongodump-2011-10-24
mongorestore --gzip --archive=test.20150715.gz --db test
mongorestore --archive=test.20150715.archive --db test

实例:指定 bsonwen 后直接可以省略 collecton 字段

mongorestore.exe --collection templateFile --db eagle d:\db\templateFile.bson

大文件拆分和合并

文件的拆分

split 命令可以将一个大文件分割成很多个小文件,有时需要将文件分割成更小的片段,比如为提高可读性,生成日志等。
选项
-b:值为每一输出档案的大小,单位为 byte。
-C:每一输出档中,单行的最大 byte 数。
-d:使用数字作为后缀。
-l:值为每一输出档的列数大小。

split -b 100000000 -d templateFile.bson template_

100000000 表示分割文件大小单位是 byte,template_ 表示生成文件前缀。

文件的合并

合并使用 linux 下的cat命令,将文件输入到最终的文件中。

cat a b > lastfile
关于我
loading