我读了MongoDB的官方文档:
重要的是:db.fsyncLock()可能会阻止读取操作,包括validation身份validation警告所需的读取操作:调用db.fsyncLock()时,确保连接保持打开状态,以允许随后调用db.fsyncUnlock()。 closures连接可能会使锁难以释放。
在最坏的情况下,我使用阻塞数据库的fsyncLock(),但是由于临时的networking故障,我突然失去了与数据库的连接。 在这种情况下,我不能重新连接,因为fsyncLock()阻止读者。 我的数据库将被永久封锁。
我正在考虑closuresmongodb做备份。 什么是单个mongod最安全的备份解决scheme?
什么是单个mongod最安全的备份解决scheme?
两个选项:
mongod使用mongodump 。 它不会阻塞,但它会导致一些读取locking和一般的噪音,因为它备份您的数据库。 这通常不是什么大事,除非你对数据库有很多的争议。 mongodump --dbpath 。 真的,你应该有一个副本集,并采取备份对辅助。
根据您的设置,解决scheme可能会有所不同。
我build议你阅读mongo文档的备份和恢复章节来决定如何实现它。
如果您select实施“文件系统快照”解决scheme(我比其他人更喜欢),则可以通过直接从要在mongo服务器上执行的过程发出db.fsyncLock()和db.fsyncUnlock()来减轻networking问题在跑。
例如,在* NIX服务器上,您应该可以通过运行如下所示的脚本来制作正确的快照:
#!/bin/sh mongo admin --eval "printjson(db.fsyncLock())" # create file system snapshot mongo admin --eval "printjson(db.fsyncUnlock())" # make the backup of entire snapshot # release the snapshot
通过在mongo所在的服务器上直接运行这个脚本, mongo客户端将通过tcp连接到127.0.0.1连接到服务器,您的networking问题将消失。