mongorestore 是官方提供用来还原导入由 mongodump 导出生成的二进制备份文件的工具, 通常与 mongodump 配合使用, 关于 mongodump 工具的使用可以参考另一篇博文: MongoDB 逻辑备份工具 mongodump
主要概要说明与 mongodump 一致, 本文同样基于 MongoDB 4.2 社区版本.
主要选项
通过执行选项 --help 选项获得:
- mongorestore --help
- Usage:
- mongorestore <options> <directory or file to restore>
- Restore backups generated with mongodump to a running server.
选项分为几个大类:
general options: 通用选项
connection options: 连接选项
ssl options: 安全连接选项
authentication options: 验证选项
kerberos options: 基于 kerboeros 验证选项
namespace options: 命名空间选项
uri options:MongoDB uri 连接串选项
input options: 输入选项
restore options: 还原选项
verbosity options: 显示选项
- general options(通用选项)
- --help # 打印工具使用方式, 选项说明.
- --version # 打印工具版本并退出.
- connection options(连接选项)
- -h, --host=<hostname> # 指定连接的实例主机名或者 IP 地址.
- --port=<port> # 指定连接的实例端口号.
- Standalone(单实例)
只指定选项 --host
mongorestore --host="192.168.196.128:27017" dump/
同时指定选项 --host 和 --port
- mongorestore --host="192.168.196.128" --port=27017 dump/
- Replica Set(副本集)
对于副本集的连接, mongorestore 总是连接副本集的主节点 Primary.
mongorestore --host="dbabdSet/192.168.196.128:27017,192.168.196.128:27018,192.168.196.128:27019" dump/
也可以单独指定副本集的 Primary 节点进行连接 (同单实例的连接方式).
- ssl options(安全连接选项)
- --ssl
- --sslCAFile=<filename>
- --sslPEMKeyFile=<filename>
- --sslPEMKeyPassword=<password>
- --sslCRLFile=<filename>
- --sslAllowInvalidCertificates
- --sslAllowInvalidHostnames
- --sslFIPSMode
关于 ssl 安全加密协议连接, 本文不过多的赘述, 详情可以参考官方文档: https://docs.mongodb.com/manual/reference/program/mongorestore/#cmdoption-mongorestore-ssl.
authentication options(验证选项)
主要用于验证连接实例的用户的合法性.
- -u, --username=<username> # 指定连接用户
- -p, --password=<password> # 指定连接用户密码
- --authenticationDatabase=<database-name> # 指定连接用户验证数据库
- --authenticationMechanism=<mechanism> # 指定连接验证机制
注意:
如果需要在导入时显示指示输入密码, 而不是直接写在选项中, 则在指定 --username 选项的同时, 不指定 --password 或者为 --password 选项指定一个空值, 如:--password "".
kerberos options(kerboeros 验证选项)
该选项主要是基于 kerberos 验证机制的连接验证选项, kerberos 只有 MongoDB 企业版才支持, 本文基于社区版本, 有关 kerberos 可以参考官方文档: https://docs.mongodb.com/manual/core/kerberos/.
namespace options(命名空间选项)
主要是指定需要导入还原的数据库和集合.
- -d, --db=<database-name> # 指定从 BSON 文件需要还原的数据库名
- -c, --collection=<collection-name> # 指定从 BSON 文件需要还原的集合名
- --excludeCollection=<collection-name> # 指定还原时需要排除的集合名, 如多个可以多次指定
- --excludeCollectionsWithPrefix=<collection-prefix> # 指定还原时需要排除的集合名前缀
- --nsExclude=<namespace-pattern> # 指定还原时需要排除的命名空间, 可以理解为数据库和集合组合过滤, 如 "test.myCollection", "reporting.*", "dept*.bar"
- --nsInclude=<namespace-pattern> # 指定还原时需要包含的命名空间, 可以理解为数据库和集合组合过滤
- --nsFrom=<namespace-pattern> # 指定接受命名空间进行匹配还原, 使用最少匹配原则
- --nsTo=<namespace-pattern> # 指定接受命名空间进行匹配还原重命名, 使用最少匹配原则
注意:
选项 - d 和 - c 指定备份文件需要还原成的数据库名和集合名, 如果实例中没有对应数据库或集合, 则创建并还原导入数据, 当指定这两个选项时, 还原文件必须为 BSON 格式的文件, 这两个选项在未来更新的版本将会被废弃, 建议使用选项 --nsInclude 替代.
对于选项 --nsInclude 指定的命名空间在备份文件当中没有对应的数据库或集合, 则数据不会被还原导入.
选项 --nsFrom 和 --nsTo 主要是为了在还原时改变备份文件中的数据库和集合原来的命名空间, 一般这两个选项结合着使用.
input options(输入选项)
影响 mongorestore 导入时的行为选项.
- --objcheck # 指定在还原插入对象时进行校验合法性
- --oplogReplay # 指定还原后回放 oplog 达到完整基于时间点的还原
- --oplogLimit=<seconds>[:ordinal] # 指定 oplog 还原开始的时间戳
- --oplogFile=<filename> # 指定需要进行回放的 oplog 文件
- --archive=<filename> # 指定需要进行还原的归档文件, 如果不指定值, 则该选项值默认获取标 准输入值
- --restoreDbUsersAndRoles # 指定还原数据库中关于用户名和角色定义
- --dir=<directory-name> # 指定还原的目录,'-' 为标准输入
- --gzip # 指定对采用压缩格式保存的导入文件进行解压
注意:
如果备份文件为归档文件类型并且进行了压缩, 则在还原时需要同时指定选项 --archive 和 --gzip.
restore options(还原选项)
主要为 mongorestore 还原导入选项.
- --drop # 指定导入集合数据时先删除原集合
- --dryRun # 指定进行预导入, 不进行真正的还原导入操作
- --writeConcern=<write-concern> # 指定导入数据时的写入优先级, 如 --writeConcern majority, --writeConcern '{w:3, wtimeout: 500, fsync: true, j: true}'
- --noIndexRestore # 指定还原不导入索引
- --convertLegacyIndexes # 指定导入时移除失效索引, 并且重建索引
- --noOptionsRestore # 阻止 mongorestore 对已还原的集合执行收集选项操作
- --keepIndexVersion # 阻止 mongorestore 还原时升级已存在的索引版本
- --maintainInsertionOrder # 指定还原导入时插入文档的顺序性
- -j, --numParallelCollections= # 指定还原导入集合并行度, 默认值: 4
- --numInsertionWorkersPerCollection= # 指定还原导入每个集合插入操作并行度, 默认值: 1
- --stopOnError # 指定还原导入时出现错误后中止执行, 少量文档还是有可能插入
- --maintainInsertionOrder # 指定还原导入时出现错误后立刻中止执行
- --bypassDocumentValidation # 指定跳过文档的合法性校验
- --preserveUUID # 指定还原导入时保持集合原始的 UUIDS
注意:
--drop 选项指定在还原导入集合时先删除原先实例中存在的同名集合, 该选项不会在运行实例中删除备份文件中没有的数据库或集合.
--maintainInsertionOrder 选项从版本 4.2 开始引入, 如果指定该选项, mongorestore 在还原导入文档时以实际导出时的插入顺序一致, 这其中包括批量写文档的顺序以及在批量中文档的插入顺序, 在早期版本中只能保证批量写文档的顺序. 如果指定该选项同时也指定了选项 --stopOnError 和设置选项 --numInsertionWorkersPerCollection = 1, 默认值: false.
--numParallelCollections 选项指定还原时插入集合的并行数, 默认值: 4.
--numInsertionWorkersPerCollection 选项指定还原导入当前集合的插入工作进程数, 默认值: 1.
--stopOnError 选项指定在 mongorestore 还原导入时一出错就中止, 默认情况下, 当 mongorestore 遇到主键重复或文档较验失败等错误时, 导入进程并不会中止.
verbosity options(显示选项)
指定导出时 log 输出的显示的详细级别.
- -v, --verbose=<level> # 指定日志输出详细级别, 如:-vvvvv 或 指定数值
- --quiet # 指定不输出任何日志信息
使用示例
还原所有数据库
- mongorestore -h"192.168.196.128:27017" -uroot --authenticationDatabase admin --objc
- heck --dir /data/mongodump/full/
还原指定数据库
- mongorestore -h"192.168.196.128:27017" -uroot --authenticationDatabase admin --objc
- heck --nsInclude=dbabd.* --dir /data/mongodump/full/
还原指定数据库和指定集合
- mongorestore -h"192.168.196.128:27017" -uroot --authenticationDatabase admin --objc
- heck --nsInclude=dbabd.orders --dir /data/mongodump/full/
或
- mongorestore -h"192.168.196.128:27017" -uroot --authenticationDatabase admin --objc
- heck -d dbabd --dir /data/mongodump/full/dbabd/orders.bson
或
- mongorestore -h"192.168.196.128:27017" -uroot --authenticationDatabase admin --objc
- heck -d dbabd -c orders --dir /data/mongodump/full/dbabd/orders.bson
指定排除一个或多个集合进行还原
- mongorestore -h"192.168.196.128:27017" -uroot --authenticationDatabase admin --objc
- heck --excludeCollection=orders --dir /data/mongodump/full/
或
- mongorestore -h"192.168.196.128:27017" -uroot --authenticationDatabase admin --objc
- heck --nsExclude=dbabd.orders --dir /data/mongodump/full/
还原压缩格式的备份
- mongorestore -h"192.168.196.128:27017" -uroot --authenticationDatabase admin --objc
- heck --gzip --nsInclude=dbabd.orders --dir /data/mongodump/gzip/
或
- mongorestore -h"192.168.196.128:27017" -uroot --authenticationDatabase admin --objc
- heck --gzip -d dbabd --dir /data/mongodump/gzip/dbabd/orders.bson.gz
或
- mongorestore -h"192.168.196.128:27017" -uroot --authenticationDatabase admin --objc
- heck --gzip -d dbabd -c orders --dir /data/mongodump/gzip/dbabd/orders.bson.gz
还原以归档文件形式存在的备份
- mongorestore -h"192.168.196.128:27017" -uroot --authenticationDatabase admin -
- -objcheck --nsInclude=dbabd.orders --archive=/data/mongodump/dbabd_orders.archive
还原集合时如果存在先清除原集合
- mongorestore -h"192.168.196.128:27017" -uroot --authenticationDatabase admin --drop --objc
- heck --dir /data/mongodump/full/
注意
mongorestore 在还原导入过程中只执行插入操作, 并不执行更新操作, 如果还原导入已存在的实例中的数据库或集合有已存在相同_id 的文档, mongorestore 并不会覆盖.
mongorestore 不导入 system.profile 集合数据.
对于开启了访问控制机制的实例, mongorestore 要执行还原导入操作的话至少需要具有 restore 角色权限.
总结
本文简要梳理了 MongoDB 逻辑备份还原工具 mongorestore 的使用, mongorestore 主要是与 mongodump 进行搭配, 面对的问题也与 mongodump 如出一辙, 在较大数据量的实例还原消耗的时间过长, 同时重建索引也比较令人头疼.
参考
- https://docs.mongodb.com/manual/core/kerberos
- https://www.cnblogs.com/dbabd/p/13139556.html
☆[本人水平有限, 文中如有错误还请留言批评指正!]☆
来源: https://www.cnblogs.com/dbabd/p/13259147.html