我使用登录到我的 mongodb 实例
mongo admin -u <user> -p <pass> --port <port>
然后运行以下命令。
rs0:SECONDARY> db.fsyncLock()
{
"info" : "now locked against writes, use db.fsyncUnlock() to unlock",
"seeAlso" : "http://dochub.mongodb.org/core/fsynccommand",
"ok" : 1
}
rs0:SECONDARY> db.fsyncUnlock()
解锁命令卡住了很长时间。如果我按 CTRL-C,我会得到以下跟踪Assertion failure isABSONObj() src/mongo/bson/bson-inl.h 1831
2015-05-13T10:08:55.455+0000 Assertion failure isABSONObj() src/mongo/bson/bson-inl.h 183
2015-05-13T10:08:55.458+0000 0x868a51 0x816b59 0x7f9cce 0x7e06be 0x61b2e0 0x7fbcb07fec60 0x7fbcb159eab9 0x8266f2 0x826729 0x826775 0x81edfc 0x81fcc6 0x8202b1 0x66d8e5 0x699f9a 0x66359a 0x680574 0x7c4743 0x7a71f9 0x7197bb52579
mongo(_ZN5mongo15printStackTraceERSo+0x21) [0x868a51]
mongo(_ZN5mongo10logContextEPKc+0x159) [0x816b59]
mongo(_ZN5mongo12verifyFailedEPKcS1_j+0x17e) [0x7f9cce]
mongo(_ZNK5mongo11shell_utils18ConnectionRegistry30killOperationsOnAllConnectionsEb+0x45e) [0x7e06be]
mongo(_Z10quitNicelyi+0x40) [0x61b2e0] /lib64/libc.so.6(+0x33c60) [0x7fbcb07fec60]
/lib64/libpthread.so.0(recv+0x79) [0x7fbcb159eab9]
mongo(_ZN5mongo6Socket5_recvEPci+0x22) [0x8266f2]
mongo(_ZN5mongo6Socket11unsafe_recvEPci+0x9) [0x826729]
mongo(_ZN5mongo6Socket4recvEPci+0x35) [0x826775]
mongo(_ZN5mongo13MessagingPort4recvERNS_7MessageE+0x9c) [0x81edfc]
mongo(_ZN5mongo13MessagingPort4recvERKNS_7MessageERS1_+0x36) [0x81fcc6]
mongo(_ZN5mongo13MessagingPort4callERNS_7MessageES2_+0x31) [0x8202b1]
mongo(_ZN5mongo18DBClientConnection4callERNS_7MessageES2_bPSs+0x55) [0x66d8e5]
mongo(_ZN5mongo14DBClientCursor4initEv+0xba) [0x699f9a]
mongo(_ZN5mongo12DBClientBase5queryERKSsNS_5QueryEiiPKNS_7BSONObjEii+0xea) [0x66359a]
mongo(_ZN5mongo18DBClientConnection5queryERKSsNS_5QueryEiiPKNS_7BSONObjEii+0xa4) [0x680574]
mongo(_ZN5mongo9mongoFindEPNS_7V8ScopeERKN2v89ArgumentsE+0x3d3) [0x7c4743]
mongo(_ZN5mongo7V8Scope10v8CallbackERKN2v89ArgumentsE+0x89) [0x7a71f9][0x7197bb52579]
当我再次登录并运行以下函数以检查是否已锁定锁定时:
serverIsLocked = function () {
var co = db.currentOp();
if (co && co.fsyncLock) {
return true;
}
return false;
}
我得到:
rs0:SECONDARY> serverIsLocked()
true
rs0:SECONDARY> db.fsyncUnlock()
并且 db.fsyncUnlock() 再次卡住。不知道发生了什么以及如何解锁数据库。的文档fsync
有以下内容:
警告 调用带锁的 fsync 时,确保连接保持打开状态以允许后续调用 db.fsyncUnlock()。
关闭连接可能会使解锁变得困难。
我最初试图使用--eval
. 这可能是一个问题吗?现在解锁数据库的方法是什么?
mongo admin --eval "printjson(db.fsyncLock())"
mongo admin --eval "printjson(db.fsyncUnlock())"
所有这些都是我正在编写的 mongodump 脚本的一部分。
更新:我在创建我的脚本时关注这篇文章:http: //www.codeproject.com/Tips/547759/Automating-backup-for-MongoDB-using-CRON-and-S-CMD
UPDATE2:看起来像 2.2 版后,mongodump
不应该使用 wit db.fsyncLock()
。我将从我的脚本中删除它并将--oplog
标志添加到mongodump
. 但是,我仍然需要弄清楚如何解锁我的数据库。