跳至主要內容

MongoDB 数据导入导出、备份与恢复

zhengcog...大约 3 分钟数据库NoSQL

一. MongoDB 数据库工具

MongoDB 提供了一系列数据库工具open in new window,包括:

  • 二进制导入/导出工具 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导入文件

mongoimportopen in new window 工具可以将 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导出文件

mongoexportopen in new window 工具可以将 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中我们使用mongodumpopen in new window命令来备份MongoDB数据。该命令可以导出所有数据到指定目录中。mongodump命令可以通过参数指定导出的数据量级转存的服务器,通过mongorestoreopen in new window命令来恢复数据

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
上次编辑于:
贡献者: Hyman
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.5