mongodb备份与恢复(上)
一. 备份单台mongodb
1. 文件快照方式
这是最简单的备份方法。但是,需要系统文件支持快照和mongod必须启用journal。如果都符合这两条要求,可以在任何时刻创建快照。
恢复时,确保没有运行mongod,执行快照恢复操作命令,然后启动mongod进程,mongod将重放journal日志。
2. 复制数据文件方式
直接拷贝数据目录下的一切文件。但是在拷贝过程中必须阻止数据文件发生更改。因此需要对数据库加锁,以防止数据写入。
1
> db.fsyncLock()
上面的命令将阻塞写入操作,并将脏数据刷新到磁盘上,确保数据一致。
然后,拷贝数据文件到备份目录下
1
# cp -R /data/db/* /backup
文件复制完成后,对数据库进行解锁,允许写操作
1
> db.fsyncUnlock()
注意: 在执行db.fsyncLock()和db.fsyncUnlock()时,不能关闭当前的shell窗口,否则可能无法连接而需要重新启动mongod服务。
恢复时,确保mongod没有运行,清空数据目录,将备份的数据拷贝到数据目录下,然后启动mongod
1
# cp -R /backup/* /data/db/
2
# mongod -f mongod.conf
3. 使用mongodump方式
千万不要fsyncLock与mongodump配合使用,如果数据库被锁定了,mongodump将永远挂起。
使用mongodump备份比较慢,在备份复制集时还有些问题,后续会说到。但是,用来备份单个数据库、集合、子集合还是比较好的方法。
01
# ./mongodump --help
02
options:
03
--help 显示帮助信息
04
-v [ --verbose ] 打印出更多信息,如时间等等 -vvvvv
05
--version 打印版本信息
06
-h [ --host ] arg 指定连接的mongodb主机,复制集时设置为<set name>/s1,s2
07
--port arg 指定mongodb端口号,也可以这么指定--host hostname:port
08
--ipv6 启用支持IPv6 support
09
-u [ --username ] arg 用户名
10
-p [ --password ] arg 密码
11
--authenticationDatabase arg user source (defaults to dbname)
12
--authenticationMechanism arg (=MONGODB-CR)
13
authentication mechanism
14
--dbpath arg 直接访问mongod的数据库文件,而不是连接到mongodb服务器。需要锁定数据目录,如果mongod当前在访问相同路径将不能使用。也就是说,mongod运行的情况下不能使用--dbpath,mongod未运行的情况下可以直接指定--dbpath
15
--directoryperdb 每个db一个单独的目录,需要指定dbpath
16
--journal 启用journaling,需要指定dbpath
17
-d [ --db ] arg 指定数据库
18
-c [ --collection ] arg 指定集合
19
-o [ --out ] arg (=dump) 指定输出目录,"-"表示标准输出
20
-q [ --query ] arg json查询
21
--oplog 使用oplog来生产时间点快照
22
--repair 尝试恢复崩溃的数据库
23
--forceTableScan 强制表扫描,不使用$snapshot
1
# mongodump -p 27017
将在当前目录下创建dump目录,备份所有的数据库,所有的数据存储在.bson文件中,可以使用mongodb提供的bsondump工具来检索它。
mongod未运行情况下:
1
# mongodump --dbpath /data/db
恢复时,使用mongorestore工具恢复
01
# ./mongorestore --help //相同部分参数意义参加上面的mongodump
02
-v [ --verbose ]
03
--version
04
-h [ --host ] arg
05
--port arg
06
--ipv6
07
-u [ --username ] arg
08
-p [ --password ] arg
09
--authenticationDatabase arg
10
--authenticationMechanism arg (=MONGODB-CR)
11
--dbpath arg
12
--directoryperdb
13
--journal
14
-d [ --db ] arg
15
-c [ --collection ] arg
16
--objcheck 在插入前验证对象,默认启用
17
--noobjcheck 不在插入前验证对象
18
--filter arg 插入前过滤
19
--drop 在插入前删除所有文档
20
--oplogReplay 在恢复时应用oplog
21
--oplogLimit arg include oplog entries before the
22
provided Timestamp (seconds[: