MongoDB

なんか楽ちんそうじゃん?

MongoDBをインストールしてみる

CentOS6.4でインストールしてみる

参考:https://gist.github.com/knife0125/5326490/raw/ad77b4e4e81f4419804ed4fe8b15955cae32c011/Installing+mongoDB.md

touch /etc/yum.repos.d/10gen.repo
vi /etc/yum.repos.d/10gen.repo

ファイルを作って以下を入力

[10gen]
name=10gen Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64
gpgcheck=0
enabled=0
yum --enablerepo=10gen install mongo-10gen mongo-10gen-server

-yはつけない派
しばらく待つとインストールされますよ。


インストール後は

service mongod start

でサーバ起動!


……と思ったのだが、ぼくの環境では何故か起動しなかった。
/var/log/mongo/mongod.logのログをもさもさ読んでみると、

ERROR: Insufficient free space for journal files

どういうことだってばよ?

mongodbはjournalログをデフォルトで有効にし、その場合3.5Gのファイルを確保する。
ディスクに余裕がない場合は、この時点でエラーになる。

mongodb 起動エラー時の対処方法-journallog - Qiita

oh……というわけで

vim /etc/mongod.conf

で、以下の設定がコメントアウトになっていたので、コメントを解除。

nojournal = true

再度service mongod startで起動出来た!


ログは読むもんだなぁ

続き、PHPで動かしてみる

マニュアルを読むとクラスが存在してて、なんか使えそうに見えるけど、実際使うにはドライバが必要なようだ。

pecl install mongo

これを唱えるといい。
もし「phpizeっていうコマンドがないよ!」って言われたらyumphp-develを入れよう。
もし「gcc...no」と言われたらyumgccを入れよう。
……gcc入ってない環境ってものアホだなぁ

コマンドライン

mongo

対話モード

use hoge

DBへ接続

db.huga.find()

は「SELECT * FROM huga」と同じ意味。

db.huga.remove();

「DELETE FROM huga」

日付型
new MongoDate

MongoDate型で格納しないと日付として扱われないらしい(UNIX timeはただの数値だ! だから日付として検索は出来ないぞ! という事らしい。)
参考http://php.net/manual/ja/class.mongodate.php

運用

なんかエラーが出てデーモンが立ち上がらないね
/var/lib/mongo/mongod.lock

を削除してservice mongod start

なんかservice mongod start出来ないんだけど

MongoDBは何らかの原因で止まると再起動する前にリペアをしてあげないといけない。

find / -name mongod.conf

設定ファイル探そうね。

dbpath=ファイルパス

設定ファイルからdbpathを探そうね。

mongod --dbpath=ファイルパス --repair
service mongod start

dbpathが分かったらリペアしようね。
デーモンも起動させようね。


参考:MongoDBが起動しなくなった場合 - Masatomo Nakano Blog