数据文件备份
MongoDB的所有数据都在数据目录(/data/db/)下,备份MongoDB就是创建数据目录中所有文件的副本。但是在运行MongoDB时复制数据目录是不安全的。
Mongodump是MongoDB自带的工具,它能在运行MongoDB时备份数据。用法如下:
1 D:\> mongodump -d test -o backup
-d指定了要备份的数据库,-o指定了备份文件所在的目录,这里会自动创建该目录。
MongoDB还提供了从备份中恢复数据的工具mongorestore。用法如下:
1 D:\> mongorestore -d foo --drop backup/test/
-d指定了要恢复的数据库,--drop代表在恢复前删除集合(若存在)。否则数据就会与现有集合数据合并,可能会覆盖一些文档。
虽然使用mongodump和mongorestore能不停机备份,但有两个问题。
(1) mongodump使用普通的查询机制,所以产生的备份不一定是服务器数据的实时快照。
(2) mongodump备份时的查询会对其他客户端的性能产生不利影响。
所以还有MongoDB的fsync命令能在MongoDB运行时复制数据目录还不会损毁数据。用法如下:
1 >use admin2 >db.runCommand( { fsync: 1, lock: true } )
至此,数据目录的数据就是一致的,且为数据的实时快照,因为上了写入锁,可以安全地将数据目录副本用做备份。备份好了,就要解锁,如下:
1 >db.fsyncUnlock();
运行fsync命令是为了确保已经解锁了。
唯一不耽误读写还能保证实时快照的备份方式就是通过从服务器备份。
联系客服