数据按期备份是很是有必要的,数据的重要性不言而喻,地球上的猪都会知道。
mongodb备份方式有三种,下面分别说到:
1. 文件快照方式
2. 复制数据文件方式
3. 使用mongodump方式 html
恢复时,确保没有运行mongod,执行快照恢复操做命令,而后启动mongod进程,mongod将重放journal日志。 mongodb
> db.fsyncLock()
上面的命令将阻塞写入操做,并将脏数据刷新到磁盘上,确保数据一致。
而后,拷贝数据文件到备份目录下 shell
# cp -R /data/db/* /backup
文件复制完成后,对数据库进行解锁,容许写操做 数据库
> db.fsyncUnlock()
注意: 在执行db.fsyncLock()和db.fsyncUnlock()时,不能关闭当前的shell窗口,不然可能没法链接而须要从新启动mongod服务。 json
恢复时,确保mongod没有运行,清空数据目录,将备份的数据拷贝到数据目录下,而后启动mongod 服务器
# cp -R /backup/* /data/db/ # mongod -f mongod.conf
# ./mongodump --help options: --help 显示帮助信息 -v [ --verbose ] 打印出更多信息,如时间等等 -vvvvv --version 打印版本信息 -h [ --host ] arg 指定链接的mongodb主机,复制集时设置为<set name>/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 --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
# mongodump -p 27017
将在当前目录下建立dump目录,备份全部的数据库,全部的数据存储在.bson文件中,可使用mongodb提供的bsondump工具来检索它。
mongod未运行状况下: 架构
# mongodump --dbpath /data/db
恢复时,使用mongorestore工具恢复 app
# ./mongorestore --help //相同部分参数意义参加上面的mongodump -v [ --verbose ] --version -h [ --host ] arg --port arg --ipv6 -u [ --username ] arg -p [ --password ] arg --authenticationDatabase arg --authenticationMechanism arg (=MONGODB-CR) --dbpath arg --directoryperdb --journal -d [ --db ] arg -c [ --collection ] arg --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 --w arg (=0) minimum number of replicas per write
恢复整个数据库: ide
# mongorestore -p 27017 dump/
恢复到特定的库和集合: 工具
# mongorestore --db ttlsa_com --collection posts dump/old_ttlsa_com/old_posts.bson
注意: mongodump和mongorestore版本最好相匹配。
在备份复制集时,能够设置mongodump链接"setName/s1,s2,s3", 它会自动选择一个可用的secondary进行备份。
备份复制集:
# mongodump -h "ttlsa/10.1.1.155,10.1.1.156,10.1.1.157" --oplog -o /backup/mongodbbackup/
恢复复制集步骤:
# mongorestore --oplogReplay dump/
> use local > db.createCollection("oplog.rs", {"capped" : true, "size" : 10000000})
# mongorestore -d local -c oplog.rs dump/oplog.bson
注意:oplog.bson不位于dump/local/oplog.rs.bson, oplog.bson记录mongodump过程当中发生的操做。
复制集的相关操做参见 http://www.ttlsa.com/html/1679.html
对于比较小的分片集群,能够直接从mongos来备份与恢复。
在大多数状况下,咱们只须要恢复集群中的某个节点。 若是须要恢复整个集群,那你够倒霉的了,整个集群数据丢失可能性比较小的。备份时,直接链接分片集群的mongod而不是经过mongos。
对于比较小型的分片集群,能够直接经过mongodump链接到mongos进行备份,备份的文件将包含config服务器的元数据信息和实际数据。
对于大型的分片集群,备份步骤以下:
注意:链接到mongos而不是config server实例。
> sh.setBalancerState(false) 或 > sh.stopBalancer() 或 > use config > db.settings.update( { _id: "balancer" }, { $set : { stopped: true } } , true );
使用mongodump备份任意一台config server。
能够直接链接任意一台的config mongod实例,也能够经过mongos链接。
# mongodump --db config
注意:链接到mongos而不是config server实例。
> sh.setBalancerState(true) 或 > sh.startBalancer() 或 > use config > db.settings.update( { _id: "balancer" }, { $set : { stopped: false } } , true );
下篇《mongodb备份与恢复(下)》将提供一个线上的备份脚本(适用于mongodb任何架构)以及增量备份的实现方法。
如需转载请注明出处:mongodb备份与恢复(上) http://www.ttlsa.com/html/1938.html