Export MongoDB data to BSON files.
Options:
--help 显示帮助信息
-v [ --verbose ] 打印出更多信息,如时间等等 -vvvvv
--quiet 忽略非错误信息
--version 打印版本信息
-h [ --host ] arg 指定连接的mongodb主机,复制集时设置为/s1,s2
--port arg 指定mongodb端口号,也可以这么指定--host hostname:port
--ipv6 启用支持IPv6 support,默认关闭
-u [ --username ] arg 用户名
-p [ --password ] arg 密码
--authenticationDatabase arg user source (defaults to dbname)
--authenticationMechanism arg (=MONGODB-CR)
authentication mechanism
--gssapiServiceName arg (=mongodb) Service name to use when authenticating
using GSSAPI/Kerberos
--gssapiHostName arg Remote host name to use for purpose of
GSSAPI/Kerberos authentication
--dbpath arg 直接访问mongod的数据库文件,而不是连接到mongodb服务器。需要锁定数据目录,如果mongod当前在访问相同路径将不能使用。也就是说,mongod运行的情况下不能使用--dbpath,mongod未运行的情况下可以直接指定--dbpath
--directoryperdb 每个db一个单独的目录,需要指定dbpath
--journal 启用journaling,需要指定dbpath
-d [ --db ] arg 指定数据库
-c [ --collection ] arg 指定集合
-o [ --out ] arg (=dump) 指定输出目录,"-"表示标准输出
-q [ --query ] arg json查询
--oplog 使用oplog来生产时间点快照
--repair 尝试恢复崩溃的数据库
--forceTableScan 强制表扫描,不使用$snapshot
--dumpDbUsersAndRoles 备份数据库的用户和角色
常用格式
mongodump -h 127.0.0.1 -d test -o ./data/
2.mongorestore还原数据库
参数如下: ./bin/mongorestore --help
Import BSON files into MongoDB.
usage: mongorestore [options] [directory or filename to restore from]
Options:
--help produce help message
-v [ --verbose ] be more verbose (include multiple times
for more verbosity e.g. -vvvvv)
--quiet silence all non error diagnostic
messages
--version print the program's version and exit
-h [ --host ] arg mongo host to connect to ( /s1,s2 for sets)
--port arg server port. Can also use --host
hostname:port
--ipv6 enable IPv6 support (disabled by
default)
-u [ --username ] arg username
-p [ --password ] arg password
--authenticationDatabase arg user source (defaults to dbname)
--authenticationMechanism arg (=MONGODB-CR)
authentication mechanism
--gssapiServiceName arg (=mongodb) Service name to use when authenticating
using GSSAPI/Kerberos
--gssapiHostName arg Remote host name to use for purpose of
GSSAPI/Kerberos authentication
--dbpath arg directly access mongod database files
in the given path, instead of
connecting to a mongod server - needs
to lock the data directory, so cannot
be used if a mongod is currently
accessing the same path
--directoryperdb each db is in a separate directory
(relevant only if dbpath specified)
--journal enable journaling (relevant only if
dbpath specified)
-d [ --db ] arg database to use
-c [ --collection ] arg collection to use (some commands)
--objcheck 在插入前验证对象,默认启用
--noobjcheck 不在插入前验证对象
--filter arg 插入前过滤
--drop 在插入前删除所有文档
--oplogReplay 在恢复时应用oplog
--oplogLimit arg include oplog entries before the
provided Timestamp (seconds[:ordinal])
during the oplog replay; the ordinal
value is optional
--keepIndexVersion don't upgrade indexes to newest version
--noOptionsRestore don't restore collection options
--noIndexRestore don't restore indexes
--restoreDbUsersAndRoles Restore user and role definitions for
the given database
--w arg (=0) minimum number of replicas per write
常用格式
4.备份分片
在分片集群下,不可能在一个时间点上得到一个完整集群状态的快照。当集群越来越大时,从备份恢复整个架构的几率越来越小的。 因此,对于分片集群的备份,只需独自备份config server和复制集。
在对分片集群进行备份与恢复操作前,要关闭balancer。
对于比较小的分片集群,可以直接从mongos来备份与恢复。
在大多数情况下,我们只需要恢复集群中的某个节点。 如果需要恢复整个集群,那你够倒霉的了,整个集群数据丢失可能性比较小的。备份时,直接连接分片集群的mongod而不是通过mongos。
对于比较小型的分片集群,可以直接通过mongodump连接到mongos进行备份,备份的文件将包含config服务器的元数据信息和实际数据。
对于大型的分片集群,备份步骤如下:
1)关闭balancer。注意:连接到mongos而不是config server实例
> sh.setBalancerState(false) 或
> sh.stopBalancer() 或
> use config
> db.settings.update( { _id: "balancer" }, { $set : { stopped: true } } , true );
2)备份集群元数据。使用mongodump备份任意一台config server。
可以直接连接任意一台的config mongod实例,也可以通过mongos连接。
# mongodump --db config
3)备份shard集群内各个replica set。可并行执行。
4)启用balancer。注意:连接到mongos而不是config server实例。
> sh.setBalancerState(true) 或
> sh.startBalancer() 或
> use config
> db.settings.update( { _id: "balancer" }, { $set : { stopped: false } } , true );
四、增量备份
1.mongooplog
如果数据量很大的话,备份整个数据库将消耗更多的时间和磁盘空间。这时增量备份将会是个必然的选择,记录前一次的完整备份点,后续的备份只备份从该点发生改变的数据。
这种方法需要一台专门的备份服务器backup_server,当然backup_server需要一个完整的备份,然后通过mongooplog工具来拷贝并应用mongodb_server的oplog日志。
在mongodb_server上执行以下操作:
> op = db.oplog.rs.find().sort({$natural: -1}).limit(1).next();
> start = op['ts']['t']/1000
在backup_server上执行:
# mongooplog --from A --seconds SECOND
SECOND值位于start值与当前时间之间。
mongooplog工具介绍:
mongooplog从远程拉取oplog日志并应用。
./bin/mongooplog --help
Pull and replay a remote MongoDB oplog.
Options:
--help 显示帮助信息
-v [ --verbose ] 打印出更多信息,如时间等等 -vvvvv
--quiet silence all non error diagnostic
messages
--version 打印版本信息
-h [ --host ] arg 指定连接的mongodb主机,复制集时设置为/s1,s2
--port arg 指定mongodb端口号,也可以这么指定--host hostname:port
--ipv6 启用支持IPv6,默认是关闭
-u [ --username ] arg 用户名
-p [ --password ] arg 密码
--authenticationDatabase arg user source (defaults to dbname)
--authenticationMechanism arg (=MONGODB-CR)
authentication mechanism
--gssapiServiceName arg (=mongodb) Service name to use when authenticating
using GSSAPI/Kerberos
--gssapiHostName arg Remote host name to use for purpose of
GSSAPI/Kerberos authentication
--dbpath arg 直接访问mongod的数据库文件,而不是连接到mongodb服务器。需要锁定数据目录,如果mongod当前在访问相同路径将不能使用。也就是说,mongod运行的情况下不能使用--dbpath,mongod未运行的情况下可以直接指定--dbpath
--directoryperdb 每个db一个单独的目录,需要指定dbpath
--journal 启用journaling
-d [ --db ] arg 指定数据库
-c [ --collection ] arg 指定集合(some commands)
-s [ --seconds ] arg seconds to go back default:86400
--from arg host to pull from
--oplogns arg (=local.oplog.rs) ns to pull from
2.10gen发布MongoDB增量备份服务