MongoDB备份和恢复

 
本节我们来介绍一下 MongoDB 中如何对数据进行备份与恢复。

数据备份

在 MongoDB 中我们可以使用 mongodump 命令来对 MongoDB 进行数据备份,该命令可以导出所有数据到指定目录中,也可以通过参数将导出数据转存的服务器。其语法格式如下:

mongodump -h dbhost -d dbname -o dbdirectory

参数说明如下:
  • -h:MongDB 所在服务器的地址,例如:127.0.0.1,同时也可以指定端口号,例如:127.0.0.1:27017;
  • -d:需要备份的数据库实例,例如:test;
  • -o:备份数据存放的位置,例如:c:\data\dump,该目录需要提前建立,在备份完成后,系统会自动在 dump 目录下建立一个 test 目录,并在这个目录里面存放该数据库实例的备份数据。

【示例】假设在电脑本地(127.0.0.1)的 27017 端口运行 MongoDB 服务,然后打开命令提示符(CMD)窗口并进入 MongoDB 安装目录下的 bin 目录,最后输入 mongodump 命令,运行结果如下:

C:\Users\79330>D:

D:\>cd install/MongoDB/bin

D:\install\Mongodb\bin>mongodump
2021-02-25T11:22:39.468+0800    writing admin.system.version to
2021-02-25T11:22:39.516+0800    done dumping admin.system.version (1 document)
2021-02-25T11:22:39.516+0800    writing bianchengbang.course to
2021-02-25T11:22:39.517+0800    done dumping bianchengbang.course (3 documents)

mongodump 命令将连接到运行于 127.0.0.1:27017 的 MongoDB 服务器上,并将服务器中的所有数据备份到 MongoDB 安装目录下的 /bin/dump/ 目录下。

下表中列举了可以与 mongodump 命令一起使用的参数列表:

语法 描述 实例
mongodump --host HOST_NAME --port PORT_NUMBER 该命令将备份所有 MongoDB 数据 mongodump --host runoob.com --port 27017
mongodump --dbpath DB_PATH --out BACKUP_DIRECTORY 该命令将仅备份指定路径上的指定数据库 mongodump --dbpath /data/db/ --out /data/backup/
mongodump --collection COLLECTION --db DB_NAME 该命令将备份指定数据库的集合 mongodump --collection mycol --db test

恢复数据

要想还原备份的数据,您可以使用 MongoDB 的 mongorestore 命令,此命令会从备份目录还原所有数据,语法格式如下:

mongorestore

【示例】下面通过一个简单的示例演示一下 mongorestore 命令的使用:

D:\install\Mongodb\bin>mongorestore
2021-02-25T13:26:27.757+0800    using default 'dump' directory
2021-02-25T13:26:27.775+0800    preparing collections to restore from
2021-02-25T13:26:27.776+0800    reading metadata for bianchengbang.course from dump\bianchengbang\course.metadata.json
2021-02-25T13:26:27.791+0800    restoring bianchengbang.course from dump\bianchengbang\course.bson
2021-02-25T13:26:27.800+0800    restoring indexes for collection bianchengbang.course from metadata
2021-02-25T13:26:27.813+0800    finished restoring bianchengbang.course (3 documents)
2021-02-25T13:26:27.814+0800    done