MongoDB的冷备份与热备份

不管是什么数据库都会考虑数据的备份复制,故障切换等。当一些数据库服务器读写比高时,我们还要考虑实现这些数据库服务器的负载均衡等功能。我们就来看看MongoDB是怎么实现这些功能。

 Backup/Restore

1、在创建MongoDB服务的时候,通过--dbpath指定目录就是存放mongdb数据库文件目录,我们可以通过复制这些文件实现数据库的冷备,但是这种方式不太安全。
因此在冷备前,要关闭服务器,如下所示:

>use admin

>db.shutdownServer()

或者可以通过fsync方式使MongoDB将数据写入缓存中,然后再复制备份

>use admin

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

这个时候我往test.foo插入了一条数据f:6 ,在执行db.foo.find()后,并没有查到这条记录,说明记录没有直接写入数据库,而是被缓冲到缓存中了。

备份完后,要解锁(防止这个时候停电或其它原因,导致未缓存中的数据丢失)

>use admin

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

>db.currentOp() 如果currentOp 只返回{"inprog":[]}结果,说明解锁成功

解锁后,缓存中的数据会写入数据库文件中,我们去查询foo结果:

2、上面是冷备的方式,我们可以在不停止服务的情况下,使用MongoDB提供的两个工具来实现备份和恢复。这两个工具在MongoDB的bin目录下可以看到:

Mongodump/ mongorestore

  • mongodump

Mongodump备份的原理是通过一次查询获取当前服务器快照,并将快照写入磁盘中,因此这种方式保存的也不是实时的,因为在获取快照后,服务器还会有数据写入,为了保证备份的安全,同样我们还是可以利用fsync锁使服务器数据暂时写入缓存中。

Ø  备份命令:

语法:mongodump -h IP -d 数据库-o 文件存在路径

./mongodump -h 192.168.1.36:10000-d testdb –o /Backup/mongodb/

如下所示:

[root@mongo01bin]# ./mongodump -h 192.168.1.36:10000 -d testdb -o /Backup/mongodb/

Ø  出现如下提示说明备份成功:

connectedto: 192.168.1.36:10000

Fri Sep 1416:00:46 DATABASE: testdb     to     /Backup/mongodb/testdb

Fri Sep 1416:00:46     testdb.blog to/Backup/mongodb/testdb/blog.bson

Fri Sep 1416:00:46 doing snapshot query

Fri Sep 1416:00:46              1 objects

Fri Sep 1416:00:46     Metadata for testdb.blog to/Backup/mongodb/testdb/blog.metadata.json

3、数据恢复命令

Ø  数据恢复命令

语法:mongorestore-h 主机-d 目标库-drop --directoryperdb 源文件

【注释】--drop参数,有此参数,则表示,先删除所有的记录,然后恢复。如无此参数,则恢复备份时候的数据,备份之后新增加的数据依然存在;/backup/mongodb则是备份文件存放路径。

如下所示:

[root@mongo01bin]# ./mongorestore --host 192.168.1.36:10000 --db testdb --drop  --directoryperdb /Backup/mongodb/testdb/

Ø  出现如下提示说明数据恢复成功

[root@mongo01bin]# ./mongorestore --host 192.168.1.36:10000 --db testdb --drop  --directoryperdb /Backup/mongodb/testdb/

connectedto: 192.168.1.36:10000

Fri Sep 1416:17:12 /Backup/mongodb/testdb/blog.bson

Fri Sep 1416:17:12     going into namespace[testdb.blog]

Fri Sep 1416:17:12      dropping

1 objectsfound

Fri Sep 1416:17:12     Creating index: { key: {_id: 1 }, ns: "testdb.blog", name: "_id_" }

 

你可能感兴趣的:(数据库)