MongoDB 逻辑备份工具mongodump
mongodump是官方提供的一个对数据库进行逻辑导出的备份工具,导出文件为BSON二进制格式,无法使用文本编辑工具直接查看。mongodump可以导出mongod或者mongos实例的数据,从集群模式来看,可以备份单实例、副本集、分片集集群。
mongodump作为MongoDB官方工具集中的一部分,从版本4.4开始,文档说明统一到工具分类中:database-tools。本文是基于MongoDB 4.2 社区版本,具体环境如下:
OS:CentOS Linux release 7.6.1810 (Core)
DB version:v4.2.2
因为安装的二进制版本,所以mongodump可执行文件通过解压压缩包就可以得到。
主要选项
mongodump支持的选项不算太多,可以通过--help
选项获得:
mongodump --help
Usage:
mongodump <options>
Export the content of a running server into .bson files.
选项分为几个大类:
- general options:通用选项
- connection options:连接选项
- ssl options:安全连接选项
- authentication options:验证选项
- kerberos options:基于kerboeros验证选项
- namespace options:命名空间选项
- uri options:mongodb uri连接串选项
- query options:查询选项
- output options:输出选项
- verbosity options:显示选项
general options(通用选项)
--help # 打印工具使用方式,选项说明。
--version # 打印工具版本并退出。
connection options(连接选项)
-h, --host=<hostname> # 指定连接的实例主机名或者IP地址。
--port=<port> # 指定连接的实例端口号。
连接选项也可以分为三种实例模式:单实例、副本集、分片集。
- Standalone(单实例)
只指定选项--host
mongodump --host="192.168.196.128:27017"
同时指定选项--host
和--port
mongodump --host="192.168.196.128" --port=27017
- Replica Set(副本集)
指定选项--host
mongodump --host="dbabdSet/192.168.196.128:27017,192.168.196.128:27018,192.168.196.128:27019"
默认情况下,mongodump读取Primary节点的数据,如果想读取Secondary节点的数据,则需要使用选项readPreference
。
mongodump --host="dbabdSet/192.168.196.128:27017,192.168.196.128:27018,192.168.196.128:27019" --readPreference=secondary
- Sharded Cluster(分片集群)
同Replica Set(副本集)相同的指定方式。
注意:
--host选项默认值为:localhost:27017
--port选项默认值为:27017
执行副本集的导出备份时通常单独连接某个Secondary节点进行导出备份:
mongodump --host="192.168.196.128:27018"
ssl options(安全连接选项)
--ssl
--sslCAFile=<filename>
--sslPEMKeyFile=<filename>
--sslPEMKeyPassword=<password>
--sslCRLFile=<filename>
--sslAllowInvalidCertificates
--sslAllowInvalidHostnames
--sslFIPSMode
关于ssl安全加密协议连接,本文不过多的赘述,详情可以参考官方文档:https://docs.mongodb.com/manual/reference/program/mongodump/index.html#cmdoption-mongodump-ssl。
authentication options(验证选项)
主要用于验证连接实例的用户的合法性。
-u, --username=<username> # 指定连接用户
-p, --password=<password> # 指定连接用户密码
--authenticationDatabase=<database-name> # 指定连接用户验证数据库
--authenticationMechanism=<mechanism> # 指定连接验证机制
注意:
如果需要在导出时显示指示输入密码,而不是直接写在选项中,则在指定--username
选项的同时,不指定--password
或者为--password
选项指定一个空值,如:--password ""。
如果没有验证数据库,则mongodump假设指定导出的数据库中包含用户的验证信息,如果没有验证数据库并且也没有指定导出数据库,则mongodump假设admin数据库包含用户的验证信息。
kerberos options(kerboeros验证选项)
该选项主要是基于kerberos验证机制的连接验证选项,kerberos只有MongoDB企业版才支持,本文基于社区版本,有关kerberos可以参考官方文档:https://docs.mongodb.com/manual/core/kerberos/。
namespace options(命名空间选项)
主要是指定需要逻辑备份的数据库和集合。
-d, --db=<database-name> # 指定数据库
-c, --collection=<collection-name> # 指定集合
注意:
如果没有指定导出数据库,则mongodump导出实例中所有的数据库,对于集合选项做相同的处理。
uri options(uri连接串选项)
从版本3.4.6开始新增加一种连接MongoDB实例的字符串格式,即URI。
--uri=mongodb-uri # 指定uri连接字符串
- Standalone(单实例)
--uri="mongodb://192.168.196.128:27017"
# 开始访问控制验证
--uri="mongodb://dbabd:admin@192.168.196.128:27017/?authSource=admin"
- Replica Set(副本集)
--uri="mongodb://192.168.196.128:27017,192.168.196.128:27018,192.168.196.128:27019/?replicaSet=dbabdSet"
# 开始访问控制验证
--uri="mongodb://dbabd:admin@192.168.196.128:27017,192.168.196.128:27018,192.168.196.128:27019/?authSource=admin&replicaSet=dbabdSet"
- Sharded Cluster(分片集群)
同Replica Set(副本集)相同的指定方式。
当指定--uri
连接串选项时,会与之前有关连接的选项互斥,这些选项包括:
- --host
- --port
- --db
- --username
- --password(如果--uri连接串有指定连接密码的话)
- --authenticationDatabase
- --authenticationMechanism
因为--uri连接串中已经包含了以上选项所涉及的部分。
query options(查询选项)
指定mongodump导出的条件,可以参考db.collections.find()方法的查询表达式。
-q, --query=<json> # 指定符合JSON v2拓展格式的查询语句 如:'{"x":{"$gt":1}}'
--queryFile=<json> # 指定包含JSON v2拓民格式查询语句的文件
--readPreference=<string>|<json> # 指定优先读取顺序 如:'nearest' 或 '{mode: "nearest", tagSets: [{a: "b"}],maxStalenessSeconds: 123}')
--forceTableScan # 指定导出时遍历集合使用的索引
注意:
如果指定--query
选项,则必须同时指定--collection
选项。
mongodump对于副本集默认优先读取primary节点,如果需要从secondary,则指定选项--readPreference=secondary。
mongodump导出时遍历集合时默认使用索引_id,如果要使用其他索引,则指定选项--forceTableScan
,该选项没办法确保mongodump导出基于某个时间点的快照,如果需要创建某一时间点的快照,则使用选项--oplog
,该选项不能与选项--query
一起使用。
output options(输出选项)
指定mongodump导出时保存BSON文件的目录,默认情况下,导出文件保存在执行mongodump当下目录中的dump目录里。
-o, --out=<directory-path> # 指定导出文件保存目录
--gzip # 使用gzip对导出文件进行压缩
--oplog # 指定保存mongodump导出期间的oplog日志,文件名为oplog.bson
--archive=<file-path> # 指定导出文件合并归档的目的地
--dumpDbUsersAndRoles # 指定导出数据库的用户和角色定义
--excludeCollection=<collection-name> # 指定导出时排除某个集合,如有多个,需要指定多次
--excludeCollectionsWithPrefix=<collection-prefix> # 指定导出时排除多个相同命名前缀的集合
-j, --numParallelCollections= # 指定导出时可以并行的集合数,默认值为4
--viewsAsCollections # 指定导出时将只读视图当成集合保存成BSON文件
注意:
当指定选项--oplog
时,mongodump在导出过程中同时会保存这一时间点产生的oplog,并保存为oplog.bson文件,使导出的备份是实例基于某个时间点的快照,如果使用mongorestore还原进行oplog回放时,需要指定选项--oplogReplay
。如果没有指定选项--oplog
,则无法保证当前的导出在这一时刻的一致性,在导出过程中有对数据库进行作何的更新操作都会影响导出的文件变化。
如果mongodump指定选项--oplog
导出时客户端执行以下命令会导致导出失败:
- renameCollection
- db.collection.renameCollection()
- db.collection.aggregate()并且执行操作符$out
当mongodump连接mongos实例进行整个分片集群的导出备份时,指定选项--oplog
是没有生效的,需要对各个分片节点集群单独导出并指定--oplog
。
选项--oplog
只有在副本集所有成员都开启oplog功能才会生效。
选项--oplog
并不会民出保存oplog的集合。
当mongodump指定选项--oplog
导出时,必须包括导出实例所有的数据库和集合,即不能指定选项--db
只导出某个库或选项--collection
只导出某个集合。
verbosity options(显示选项)
指定导出时log输出的显示的详细级别。
-v, --verbose=<level> # 指定日志输出详细级别,如:-vvvvv 或 指定数值
--quiet # 指定不输出作何日志信息
使用示例
备份导出数据库
mongodump -h"192.168.196.128:27017" -uroot --authenticationDatabase admin -d dbabd -o /data/mongodump/
备份导出数据库某个集合
mongodump -h"192.168.196.128:27017" -uroot --authenticationDatabase admin -d dbabd -
c orders -o /data/mongodump/
备份导出排除某个集合
# 如果有多个排除集合,则多次指定选项--excludeCollection
mongodump -h"192.168.196.128:27017" -uroot --authenticationDatabase admin -d dbabd -
-excludeCollection=orders -o /data/mongodump/
备份导出文件归档到文件
mongodump -h"192.168.196.128:27017" -uroot --authenticationDatabase admin -d dbabd --archive=/data/mongodump/dbabd.archive
备份导出文件进行压缩
mongodump -h"192.168.196.128:27017" -uroot --authenticationDatabase admin -d dbabd -
-gzip -o /data/mongodump/
备份导出文件进行压缩并归档
mongodump -h"192.168.196.128:27017" -uroot --authenticationDatabase admin -d dbabd --gzip --archive=/data/mongodump/dbabd.archive
指定条件的备份导出
mongodump -h"192.168.196.128:27017" -uroot --authenticationDatabase admin -d dbabd -c orders -q='{"price":{"$in":[25,50]}}' -o /data/mongodump/
注意
mongodump不会导出有关于local数据库的内容;
mongodump不会导出文档的索引,而只会导出文档的数据,在导出文件还原之后需要重建索引;
对于开启了访问控制机制的实例,mongodump要执行导出操作的话必须对每个需要导出的数据库具有find权限,内建角色backup提供了备份所有数据库的权限,所以可以对用户直接授予backup角色。
总结
对于MongoDB实例的逻辑备份工具,mongodump是个不二选择,官方出品,安全稳定性有保障;
mongodump较适合数据量较少的备份,相对于数据量较大的情况,备份效率不是太高;
mongodump导出时比较消耗服务器性能,而且不支持同时导出多个库,对于导出库数据的最终一致性选项--oplog
也只能是全库导出才支持。
参考
https://docs.mongodb.com/database-tools/mongodump
https://docs.mongodb.com/manual/reference/program/mongodump/index.html#cmdoption-mongodump-ssl2
https://docs.mongodb.com/manual/core/kerberos/
☆〖本人水平有限,文中如有错误还请留言批评指正!〗☆
MongoDB 逻辑备份工具mongodump的更多相关文章
- MongoDB 逻辑还原工具mongorestore
mongorestore是官方提供用来还原导入由mongodump导出生成的二进制备份文件的工具,通常与mongodump配合使用,关于mongodump工具的使用可以参考另一篇博文:MongoDB ...
- 官方出品,比 mydumper 更快的逻辑备份工具
mysqldump 和 mydumper 是我们常用的两个逻辑备份工具. 无论是 mysqldump 还是 mydumper 都是将备份数据通过 INSERT 的方式写入到备份文件中. 恢复时,myl ...
- MySQL 逻辑备份工具
简介: Mydumper.Myloader 是一个第三方的.开源的 MySQL 逻辑备份工具. 支持多线程,比起 mysqldump 要快很多,也能解决 innobackupex 备份工具对 MyIS ...
- MySQL数据备份之逻辑备份工具mysqldump
#前言:我们知道对数据进行备份很重要,出现非正常操作可以进行对数据进行恢复,下面我们就来使用一下mysql数据库自带的一个逻辑备份工具mysqldump 1.简单概述 #mysqldump:mysql ...
- MongoDB的备份(mongodump)与恢复(mongorestore)
备份: D:\mongodb2.4.3\bin>mongodump -u101.key -p123 -h 127.0.0.1:27017 -d mydb -o d:\backup 恢复: D:\ ...
- postgresql逻辑备份工具pg_dump和pg_resotre学习
(一)pg_dump备份 pg提供了pg_dump和pg_dumpall命令进行数据库的备份,pg_dumpall是将整个pg集群转储到一个脚本文件中,而pg_dump命令可以选择一个数据库或者部分表 ...
- mysqlpump:更加合理的mysql数据库逻辑备份工具
端看参见就知道了! E:\mysql-8.0.12-winx64>mysqlpump --helpmysqlpump Ver 8.0.12 for Win64 on x86_64 (MySQL ...
- mysql逻辑备份与还原工具mysqldump
(一)mysqldump介绍 mysqldump是MySQL自带的逻辑备份工具,类似于Oracle的expdp/impdp,mysqldump备份十分灵活,可以在以下级别对数据库进行备份: 实例下的所 ...
- PCB MongoDB数据库 备份与还原
一. MongoDB数据库 备份与还原工具介绍: 数据备份工具 mongodump.exe 数据还原工具 mongorestore.exe 二. MongoDB数据库备份 mongodump - ...
随机推荐
- xshell使用技巧
XShell是一款Windows下的一款远程连接Linux主机的工具,类似的软件还有SecureCRT,putty等,但是个人感觉XShell好用,功能强大.. 一.复制和粘贴 linux的Shell ...
- vue-cli3的eslint配置问题
vue-cli3按照官网教程配置搭建后,发现每次编译,eslint都抛出错误 error: Expected indentation of 4 spaces but found 0 (indent) ...
- [ES6系列-05]字符串相关操作更方便
[原创] 码路工人 Coder-Power 大家好,这里是码路工人有力量,我是码路工人,你们是力量. github-pages 博客园cnblogs 今天的内容是,关于 ES6 JavaScript ...
- NOIP 2017 P3959 宝藏 (状态压缩DP板子)
洛谷题目传送门!! 题目的N这么小,当然是选择用状压DP啦! 等等,我好像不会状缩.... 首先,我们当然是要写状态转移方程了!! 那么,如果我们设 f[s] 状态s下,所要的最小花费,那么很显 ...
- [安卓基础] 007.管理Activity的生命周期
*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...
- Rocket - devices - TLError
https://mp.weixin.qq.com/s/s_6qPkT2zwdqYLw5iK7_8g 简单介绍TLError的实现. 1. 继承自DevNullDevice TLError继承自DevN ...
- Rocket - jtag - JtagStateMachine
https://mp.weixin.qq.com/s/cFXVOBHayV2w27jpT5RglA 简单介绍JtagStateMachine的实现. 1. 简单介绍 根据IEEE 1149.1-200 ...
- Chisel3 - 模块
https://mp.weixin.qq.com/s/2vjM-gcauvHnn6KJzlOm4g Chisel的模块和Verilog的模块很相似,都用来定义模块结构(hierarchical s ...
- Java实现 LeetCode 670 最大交换(暴力)
670. 最大交换 给定一个非负整数,你至多可以交换一次数字中的任意两位.返回你能得到的最大值. 示例 1 : 输入: 2736 输出: 7236 解释: 交换数字2和数字7. 示例 2 : 输入: ...
- Java实现 LeetCode 409 最长回文串
409. 最长回文串 给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串. 在构造过程中,请注意区分大小写.比如 "Aa" 不能当做一个回文字符串. 注意 ...