Mongodb 数据库备份与还原
MongoDB 中使用 mongodump
来对整个数据库进行备份,使用
mongorestore
来将数据从备份中还原。
本文介绍一种常用的备份还原的参数设置,可以在实际工作中直接使用
功能安装
mongodump
与 mongorestore
是
mongodb-database-tools 中提供的命令行工具,使用这两个命令,需要先安装
mongodb-database-tools。
scoop 安装方法:
1 | scoop install mongodb-database-tools |
手动安装:
从 Try MongoDB Tools Free 下载 MongoDB Command Line Database Tools Download 安装包进行安装。
备份
1 | mongodump -h localhost:27017 -d databaseName -u test -p testpwd --authenticationDatabase admin --gzip --archive=C:\Users\%username%\Desktop\dump\databaseName.gzip |
-h / --host
MongoDB 所在服务器地址,也可以同时指定端口号:127.0.0.1:27017
-d / --db
指定数据库名称
-u / --username
用于授权验证的用户名
-p / --password
用于授权验证的密码
--authenticationDatabase
验证授权的数据库名,一般是 admin
-o / --out
指定导出目录,如果不指定
-archive
,会在该目录中导出多个文件,每个集合有两个文件。--gzip
导出时使用 gzip 压缩
--archive
导出成单个文件
还原
1 | mongorestore -h localhost:27018 -u test -p testpwd --authenticationDatabase admin --gzip --objcheck --drop --noIndexRestore --nsInclude=databaseName.* --nsFrom=databaseName.* --nsTo=newDatabaseName.* --archive=C:\Users\%username%\Desktop\dump\databaseName.gzip |
如果不需要重命名数据库,去掉
--nsFrom
和--nsTo
参数即可
--drop
删除已经存在的集合
--noIndexRestore
禁止恢复索引
--nsInclude
包含的命名空间(namespace),
databaseName.*
表示数据库 databaseName 下的所有集合--nsFrom
指定重命名前的数据库命名空间
--nsTo
指定重命名后的数据库命名空间
副本集中备份与还原
如果 MongoDB 配置了副本集,上述中的 -h
需要使用主节点的 IP 地址和端口。
通过以下方法查看主节点:
1 | # 进入到 mongodb 的任意节点中 |
The mongo shell is removed from MongoDB 6.0. The replacement is mongosh.
MongoDB 6.0 以后
mongo
命令取消了,改用mongosh
,mongosh
需要手动安装,可以使用 scoop 安装:scoop install mongosh
可以看到如下结果:
1 | // 下面内容省略了其它无关配置 |
在上述结果中,state
为 1 时(stateStr 为
"PRIMARY")表示主节点。
在对副本集数据库进行恢复时,若数据过大,节点过多,会导致磁盘的读写飙升到100%,从而无法完成数据库恢复。此时可以减少副本节点,建议只使用 2 个。