MongoDB 数据导入导出、备份与恢复
一. MongoDB 数据库工具
MongoDB 提供了一系列数据库工具,包括:
- 二进制导入/导出工具 mongodump、mongorestore以及bsondump
- 数据导入/导出工具 mongoimport、mongoexport
- 诊断监控工具 mongostat、mongotop
- GridFS工具 mongofiles
MongoDB 4.4 版本开始,这些数据库工具不再随着服务器一起发布安装,而是使用单独的软件包
Centos7.9 安装100.7.3版本软件包
# 下载软件包
wget https://fastdl.mongodb.org/tools/db/mongodb-database-tools-rhel70-x86_64-100.7.3.rpm
# 安装依赖
yum install -y cyrus-sasl cyrus-sasl-gssapi cyrus-sasl-plain
# 安装软件包
rpm -ivh mongodb-database-tools-rhel70-x86_64-100.7.3.rpm
二. 导入导出
1. 使用mongoimport导入文件
mongoimport 工具可以将 JSON、CSV 以及 TSV 文件导入 MongoDB 服务器
# 本地导出,加了--drop参数表示如果集合中有数据,则删除后再导入
mongoimport ./users.json -d users -c users
mongoimport ./users.json -d users -c users --drop
# 远程导出
mongoimport ./users.json --uri="mongodb://localhost:27017/users" -c users
mongoimport ./users.json --uri="mongodb://localhost:27017/users" -c users --drop
2. 使用mongoexport导出文件
mongoexport 工具可以将 MongoDB 数据库中的内容导出为 JSON 或者 CSV 文件
# 本地导出
mongoexport --db=users --collection=users --out=users.json
# 远程导出
mongoexport --uri="mongodb://localhost:27017/users" --collection=users --out=users1.json
# 指定查询条件导出
mongoexport --db=users --collection=users --out=users_query.json --query='{"age":{"$gt": 30}}'
3. 导出副本集中的数据
如果想要导出副本集中的数据,可以在 --uri 连接字符串中指定副本集和成员:
mongoexport --uri="mongodb://localhost:27017,mongodb1.remote.server:27017,mongodb2.remote.server:27017/bookdb?replicaSet=myReplicaSetName" --collection=users --out=users.json
或者,也可以在 --host 参数中指定副本集和成员
mongoexport --host="myReplicaSetName/mongodb1.remote.server:27017,mongodb2.remote.server:27017" --db=users --collection=users --out=users.json
默认情况下,mongoexport 通过副本集的主节点读取数据。不过,我们可以通过指定读优先级修改这个配置。例如
# 从副本的从节点读取数据
mongoexport --uri="mongodb://mongodb0.remote.server:27017,mongodb1.remote.server:27017,mongodb2.remote.server:27017/bookdb?replicaSet=myReplicaSetName&readPreference=secondary" --collection=movies --out=movies.json
或者,也可以通过 --readPreference 参数指定读取的节点
mongoexport --host="myReplicaSetName/mongodb0.remote.server:27017,mongodb1.remote.server:27017,mongodb2.remote.server:27017" --readPreference=secondary --collection=movies --out=movies.json
4. 导出分片集群中的数据
如果想要导出分片集群中的数据,可以在 --uri 连接字符串中指定 mongos 实例的地址。例如:
mongoexport --uri="mongodb://mongos0.remote.server:27017/bookdb" --collection=movies --out=movies.json
三. 备份与恢复
在Mongodb中我们使用mongodump命令来备份MongoDB数据。该命令可以导出所有数据到指定目录中。mongodump命令可以通过参数指定导出的数据量级转存的服务器,通过mongorestore命令来恢复数据
1. 使用mongodump备份数据
语法格式:
mongodump -h dbhost -d dname -o 备份路径
- -h MongoDB服务器地址
- -d 需要备份的数据库
- -o 备份的数据存放位置
示例:
mongodump -d users -o mongodb_backup
2. 使用mongorestore恢复数据
语法格式:
mongorestore -h <hostname><:port> -d dbname <path>
--host
<:port>
, -h<:port>
:MongoDB所在服务器地址,默认为: localhost:27017
--db , -d :
需要恢复的数据库实例,例如:test,当然这个名称也可以和备份时候的不一样,比如test2
--drop:
恢复的时候,先删除当前数据,然后恢复备份的数据。就是说,恢复后,备份后添加修改的数据都会被删除,慎用哦!
<path>
:mongorestore 最后的一个参数,设置备份数据所在位置,例如:/data/dump/test。
你不能同时指定
<path>
和 --dir 选项,--dir也可以设置备份目录。--dir:
指定备份的目录
你不能同时指定
<path>
和 --dir 选项
示例:
use mydb
mongorestore -d mydb ./mongodb_backup/users