我想在后台运行 mongod 作为一种始终存在的东西。什么是最好的方法来做到这一点?有点像我可以在启动时运行 MySQL 的方式,它总是在后台运行。也许这只是一些 bash 脚本,但很高兴听到是否有更好的方法。如果它只是 bash - 那会是什么样子?谢谢。
我有这个代码
$passengerId = new \MongoId(oPassenger->getId());
return $this->createQueryBuilder('Device')
->update()
->multiple(true)
->field('activated')->set(false)
->field('passenger')->unsetField()->equals($passengerId)
->field('_id')->notEqual($deviceId)
->getQuery()
->execute();
Run Code Online (Sandbox Code Playgroud)
它在我的开发服务器上运行良好,但在我的本地机器上崩溃。
pecl list在开发返回时运行
APC 3.1.13 beta
amqp 1.2.0 stable
intl 3.0.0 stable
mongo 1.3.7 stable
Run Code Online (Sandbox Code Playgroud)
和本地回报:
mongo 1.5.6 stable
xdebug 2.2.5 stable
Run Code Online (Sandbox Code Playgroud)
我机器上的崩溃消息是
"name":"MongoException","message":"Invalid object ID"},"code":500}
Run Code Online (Sandbox Code Playgroud)
我试过降级 mongo 的本地版本,但我无法用 pecl 糟糕的文档来解决这个问题。例如我试过这个:
sudo pecl upgrade -f -c channel://pecl.php.net/mongo-1.3.7
Run Code Online (Sandbox Code Playgroud)
但我一直在获取channel does not exist我所有的频道排列。
也在mongod --version本地运行返回db 版本 v2.6.0,在 dev 上返回db 版本 v2.4.3
想法?
我正在设置一个 mongoDB 副本集,我想做的第一件事就是关闭文件系统上的 atime。经过一番研究,我不反对这样做,但我不得不问,atime有什么用?我搜索了互联网,发现很少有“这个应用程序或这个过程使用时间,如果你把它关掉你会很愚蠢”这样的警告,但是作为一个天生偏执的人,我不得不怀疑。
那么,什么使用 atime,如果我将其关闭,会破坏什么?
这是很容易让我连接到我的远程MySQL服务器上使用AWS sequelpro,但是我用的MongoDB做同样的事情挣扎。
我尝试通过命令行设置 ssh 隧道,如下所示:
ssh -fN -l root -i path/to/id_rsa -L 9999:host.com:27017 host.com
Run Code Online (Sandbox Code Playgroud)
我也试过用 ip 地址替换主机
这个想法是将端口 9999 上的所有 mongodb 连接转发到主机上端口 27101 上的连接。但是当我运行命令时:
mongo --host localhost --port 9999
Run Code Online (Sandbox Code Playgroud)
连接失败,我得到了这个:
MongoDB shell version: 2.6.0
connecting to: localhost:9999/test
channel 2: open failed: connect failed: Connection timed out
channel 3: open failed: connect failed: Connection timed out
2014-05-22T14:42:01.372+0300 DBClientCursor::init call() failed
2014-05-22T14:42:01.374+0300 Error: DBClientBase::findN: transport error: localhost:9999 ns: admin.$cmd query: { whatsmyuri: 1 } at src/mongo/shell/mongo.js:148
exception: connect failed …Run Code Online (Sandbox Code Playgroud) 我的 MongoDB 数据库在负载下遇到问题,日志中出现以下错误:
[initandlisten] pthread_create failed: errno:11 Resource temporarily unavailable
[initandlisten] can't create new thread, closing connection
Run Code Online (Sandbox Code Playgroud)
我得出的结论是,我需要提高 1024 的“ulimit -u”或“最大进程”设置,并且使用率可能已经超过了启动的 Web 前端(不知道如何检查) .
我编辑了 /etc/security/limits.conf 以添加最后两行(前两行已经存在):
* soft nofile 350000
* hard nofile 350000
* soft nproc 30000
* hard nproc 30000
Run Code Online (Sandbox Code Playgroud)
然后我重新启动了系统(顺便说一句,我应该这样做,还是重新启动 mongod 服务就足够了?)
重新启动后,查看 mongod 进程的进程限制,似乎软限制已被忽略:
$ cat /proc/2207/limits
Limit Soft Limit Hard Limit Units
Max cpu time unlimited unlimited seconds
Max file size unlimited unlimited bytes
Max data size unlimited unlimited bytes
Max stack size 8388608 …Run Code Online (Sandbox Code Playgroud) 这里的文档说三个:http : //docs.mongodb.org/manual/tutorial/deploy-replica-set/
“一个副本集需要三个不同的系统……”
而这里的文档说两个:http : //docs.mongodb.org/manual/core/replication/
“大多数副本集由两个或更多 mongod 实例组成......”
有谁知道哪个是正确的?
Mongo文档说我可以:
我希望操作系统的 logrotate 能够压缩旧文件并删除最旧的文件,但是除了发送 SIGUSR1 之外,没有办法告诉 mongod 进程切换当前日志。
所以我写了
/var/log/mongodb/*.log {
daily
rotate 5
compress
dateext
missingok
notifempty
sharedscripts
postrotate
/usr/bin/killall -SIGUSR1 mongod
/usr/bin/killall -SIGUSR1 mongos
endscript
}
Run Code Online (Sandbox Code Playgroud)
到 /etc/logrotate.d/mongo。
现在从 logrotate 和空日志文件中获取命名良好的日志文件,例如mongodb.log.2013-09-18T23-49-44SIGUSR1 切换的痕迹。如何摆脱后者?
我在 Ubuntu 12.10 上安装了 MongoDB 2.0.4。最近我在从外部连接到数据库时遇到了一些问题,并发现有一些东西阻止了 MongoDB 正确启动。正如几个来源(参见 StackOverflow)所建议的那样,我删除/var/lib/mongodb/mongodb.lock并运行了mongod --repair. 这并没有解决问题,MongoDB 不会运行并不断创建锁定文件,之后它不会注意删除这些文件。通过查看日志,我意识到它无法访问某个名为 的文件夹$tmpSomething,因此(因为名称暗示了一个临时文件夹)我将其删除,然后一切正常......除了我只有一个的事实我以前的数据库在视线中,而其他数据库还在那里,因为我的/var/lib/mongodb/文件夹仍然充满.ns .0 .1 .n重量很大的文件。有没有办法将它们恢复到数据库中?(我已经尝试过使用 mongorestore,但正如我所料,它不处理这些文件)。
谢谢
假设您现在在 dell.com 上,并且您正在购买一台服务器来为您的小型初创公司运行 MongoDB 数据库。您将不得不每分钟处理数万次写入和读取(但处理小对象)。你会选择 2 个处理器吗?在 RAM 上投资更多?
我听说(如果我错了,请纠正我)MongoDB 在 RAM 上处理了它所能处理的最多的内容,然后将所有内容刷新到磁盘,在这种情况下,我应该投资具有大型 L2 缓存的 CPU,可能 > 40GB 的 RAM和固态硬盘.. 对吗?
使用高端(~11,309 美元,2 个昂贵的处理器,96GB 内存)服务器还是 2x(~6,419 美元,2 个昂贵处理器,12GB 内存)服务器会更好吗?
戴尔还好吗,或者你有更好的建议吗?(我在美国境外,在葡萄牙)