5. MongoDB备份和恢复

1.mongodump和mongorestore

mongodump和mongorestore不能停机备份

(1) mongodump

使用普通的查询机制,所以产生的备份不一定是数据库数据的实时快照。

mongodump -d admin -o ./backup

 -h host / -d db / -c collection / -u username / -p password / -o output directory

(2)mongorestore

mongorestore -d test3 --drop ./backup/test2

 -h host / --port 也可以使用 --host hostname:port / -u username / -p password / -d db / -c collection / 

--dir input directiory / --drop  先删除在导入集合

2. fsync和锁

(1)fsync 强制服务器将所有缓冲区写入磁盘

下面的例子强制执行了fsync并获得写入锁,上了写入锁可以安全的将数据目录副本用作备份。只能运行在 admin管理数据库(use admin),将锁住全部数据库

db.runCommand({"fsync" : 1, "lock" : 1})

(2)解锁

同样只能运行在admin数据库

db.$cmd.sys.unlock.findOne();

3.从属备份

最好的备份方案是在从服务器上进行备份。

4.修复

针对停电、崩溃等情况下数据有可能损坏,MongoDB内置了修复功能

(1)方法一 --repair 

一般情况下,需要先删除lock 文件,然后通过mongod --repair来修复

# 删除lock文件
rm -rf /var/lib/mongo/mongod.lock
# 删除log文件
rm -rf /var/log/mongodb/mongod.log
# 删除mongodb进程文件
rm -rf /var/run/mongodb/mongod.pid
# 修复操作
mkdir /var/lib/mongo/repair
mongod --repair --dbpath /var/lib/mongo   --repairpath /var/lib/mongo/repair/
# 删除lock文件
rm -rf /var/lib/mongo/mongod.lock
 repair的过程:将所有文档导出然后马上导入,忽略无效的文档,完成后重新建立索引。

 mongod --config /etc/mongod.conf --port=27017 --pidfilepath=/var/run/mongodb/mongod.pid --dbpath=/var/lib/mongo --directoryperdb --nojournal --noauth 

(2)方法二 修复运行中的数据库 repairDatabase

use test
db.repairDatabase()

相关推荐