在 Mongodb 中我们可以使用 mongodump 命令来备份 MongoDB 数据,使用 mongorestore 命令来恢复 MongoDB 数据,该命令可以导出所有数据到指定目录中。
注意,MongoDB 4.4 之后,发现 bin 目录没有了 mongodump 等工具,这些工具被单独提取出去了,需要的用户可自行下载,下载地址:https://www.mongodb.com/try/download/database-tools ,如下图:
打开下载的工具压缩包,如下图:
可以看到其中提供了很多工具,如:mongotop.exe、mongostat.exe、mongodump.exe 等等。
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)
备份执行成功后,输出到目录的文件如下图:
(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 中,使用 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