MongoDB 备份与恢复

在 Mongodb 中我们可以使用 mongodump 命令来备份 MongoDB 数据,使用 mongorestore 命令来恢复 MongoDB 数据,该命令可以导出所有数据到指定目录中。

注意,MongoDB 4.4 之后,发现 bin 目录没有了 mongodump 等工具,这些工具被单独提取出去了,需要的用户可自行下载,下载地址:https://www.mongodb.com/try/download/database-tools  ,如下图:

MongoDB 备份与恢复

打开下载的工具压缩包,如下图:

MongoDB 备份与恢复

可以看到其中提供了很多工具,如:mongotop.exe、mongostat.exe、mongodump.exe 等等。

MongoDB 数据备份

MongoDB 的 mongodump 脚本命令语法如下:

mongodump -h dbhost -d dbname -o dbdirectory

参数说明:

  • -h:需要导出 MongoDB 数据所在的服务器地址,例如 127.0.0.1,当然也可以同时指定端口号,如:127.0.0.1:27017

  • -d:需要备份的数据库,例 test

  • -o:备份的数据存放位置,例如:/mnt/data/backup/mongodb/。注意,该目录需要提前建立,在备份完成后,系统自动在 mongodb 目录下建立一个 test 目录,这个目录里面存放该数据库实例的备份数据。

更多参数,请参考 “工具 mongodump”。

数据备份示例

(1)将本地 mongodb 服务的 test 数据库备份到 D:mongodb_back 目录中,例如:

C:UsersAdministrator> mongodump -h 127.0.0.1 -d test -o D:mongodb_back
2023-09-07T12:49:24.504+0800    writing test.col3 to D:mongodb_back	estcol3.bson
2023-09-07T12:49:24.547+0800    writing test.col to D:mongodb_back	estcol.bson
2023-09-07T12:49:24.547+0800    writing test.array_demo to D:mongodb_back	estarray_demo.bson
2023-09-07T12:49:24.547+0800    writing test.restaurants to D:mongodb_back	est
estaurants.bson
2023-09-07T12:49:24.551+0800    done dumping test.col3 (2 documents)
2023-09-07T12:49:24.551+0800    done dumping test.array_demo (1 document)
2023-09-07T12:49:24.552+0800    done dumping test.col (6 documents)
2023-09-07T12:49:24.552+0800    writing test.sub_demo to D:mongodb_back	estsub_demo.bson
2023-09-07T12:49:24.552+0800    writing test.mycol to D:mongodb_back	estmycol.bson
2023-09-07T12:49:24.552+0800    writing test.hxstrive to D:mongodb_back	esthxstrive.bson
2023-09-07T12:49:24.552+0800    done dumping test.restaurants (5 documents)
2023-09-07T12:49:24.553+0800    writing test.collection to D:mongodb_back	estcollection.bson
2023-09-07T12:49:24.555+0800    done dumping test.mycol (0 documents)
2023-09-07T12:49:24.555+0800    done dumping test.hxstrive (0 documents)
2023-09-07T12:49:24.555+0800    done dumping test.sub_demo (1 document)
2023-09-07T12:49:24.556+0800    done dumping test.collection (0 documents)

备份执行成功后,输出到目录的文件如下图:

MongoDB 备份与恢复

(2)使用 mongodump 命令备份所有的 MongoDB 数据,例如:

mongodump -h 127.0.0.1 --port 27017 -o D:mongodb_back

上述命令将本地 mognodb 服务的所有数据备份到 D:mongodb_back 目录。

(3)使用 mongodump 命令备份指定的数据库集合,例如:

C:UsersAdministrator> mongodump -h 127.0.0.1 --port 27017 --db test --collection col -o D:mongodb_back
2023-09-07T12:55:46.998+0800    writing test.col to D:mongodb_back	estcol.bson
2023-09-07T12:55:47.045+0800    done dumping test.col (6 documents)

上述命令将本地 mongodb 服务 test 数据库中的 col 集合备份到 D:mongodb_back 目录。如下图:

MongoDB 备份与恢复

MongoDB 数据恢复

在 MongoDB 中,使用 mongorestore 命令来恢复备份的数据。

mongorestore 命令脚本语法如下:

mongorestore -h <hostname><:port> -d dbname <path>

参数说明:

  • --host <:port>, -h <:port>:MongoDB 所在服务器地址,默认为:localhost:27017

  • --db , -d :需要恢复的数据库实例,例如:test,当然这个名称也可以和备份时候的不一样,比如 test2

  • --drop:恢复的时候,先删除当前数据,然后恢复备份的数据。就是说,恢复后,备份后添加修改的数据都会被删除,请谨慎使用!!

  • <path>:设置备份数据所在位置,例如:c:datadump est。你不能同时指定 <path> 和 --dir 选项,--dir 也可以设置备份目录。

  • --dir:指定备份的目录。你不能同时指定 <path> 和 --dir 选项。

更多参数,请参考 “工具 mongorestore”。

数据恢复示例

(1)将 D:mongodb_back est 目录的备份数据恢复本地 MongoDB 服务的 test 数据库,例如:

C:UsersAdministrator> mongorestore --host 127.0.0.1:27017 -d test D:mongodb_back	est
2023-09-07T13:03:43.683+0800    The --db and --collection flags are deprecated for this use-case; please use --nsInclude instead, i.e. with --nsInclude=${DATABASE}.${COLLECTION}
2023-09-07T13:03:43.725+0800    building a list of collections to restore from D:mongodb_back	est dir
2023-09-07T13:03:43.729+0800    reading metadata for test.sub_demo from D:mongodb_back	estsub_demo.metadata.json
2023-09-07T13:03:43.730+0800    reading metadata for test.array_demo from D:mongodb_back	estarray_demo.metadata.json
2023-09-07T13:03:43.730+0800    reading metadata for test.col from D:mongodb_back	estcol.metadata.json
2023-09-07T13:03:43.731+0800    reading metadata for test.col3 from D:mongodb_back	estcol3.metadata.json
2023-09-07T13:03:43.732+0800    reading metadata for test.collection from D:mongodb_back	estcollection.metadata.json
2023-09-07T13:03:43.732+0800    reading metadata for test.hxstrive from D:mongodb_back	esthxstrive.metadata.json
2023-09-07T13:03:43.733+0800    reading metadata for test.mycol from D:mongodb_back	estmycol.metadata.json
2023-09-07T13:03:43.734+0800    reading metadata for test.restaurants from D:mongodb_back	est
estaurants.metadata.json
2023-09-07T13:03:43.809+0800    restoring test.col from D:mongodb_back	estcol.bson
2023-09-07T13:03:43.818+0800    restoring test.sub_demo from D:mongodb_back	estsub_demo.bson
2023-09-07T13:03:43.822+0800    finished restoring test.col (6 documents, 0 failures)
...
2023-09-07T13:03:43.992+0800    15 document(s) restored successfully. 0 document(s) failed to restore.

(2)将 D:mongodb_back est 目录的备份数据恢复本地 MongoDB 服务的 test_back 数据库,例如:

mongorestore --host 127.0.0.1:27017 -d test_back D:mongodb_back	est

注意:上面命令中备份数据库和恢复目标数据库名称不一致。

(3)使用 --dir 指定待恢复目录地址,并且通过 --drop 在恢复之前删除数据库,例如:

mongorestore --host 127.0.0.1:27017 -d test_back --drop --dir D:mongodb_back	est
说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号