MacBookにMongoDBをセットアップしてみた。
オブジェクト指向データベースであるMongoDBを触ってみたかったので、MacBookにセットアップしてみました。
インストールというか設置
まずMongoDB公式からダウンロードします。
$ ls -l@ mongodb-osx-i386-1.4.3.tar -rw-r--r--@ 1 myuser staff 75847680 6 14 19:26 mongodb-osx-i386-1.4.3.tar com.apple.quarantine 42
MacではExtended Attributeという属性があり、ダウンロードしたファイルには com.apple.quarantine が付きます。
ls するとパーミッションの右側にアットマークが付いていると、Extended Attribute があるという事みたい。
$ xattr -d com.apple.quarantine mongodb-osx-i386-1.4.3.tar $ ls -l@ mongodb-osx-i386-1.4.3.tar -rw-r--r-- 1 myuser staff 75847680 6 14 19:26 mongodb-osx-i386-1.4.3.tar
気にしなくても問題はないけど、せっかくなので消しておきます。
あらかじめ消しておかないと、中身全部に com.apple.quarantine が付いた形で解凍しちゃいます。
どうもネットでちょっと調べた*1限り、xattrコマンドは再帰的な処理は出来なさそうなので、消すなら解凍する前が良いです。
$ sudo mv mongodb-osx-i386-1.4.3 /usr/local $ cd /usr/local $ sudo chown -R root:wheel mongodb-osx-i386-1.4.3/ $ sudo ln -s mongodb-osx-i386-1.4.3 mongodb $ sudo ln -s /usr/local/mongodb/bin/* /usr/local/bin/ $ sudo ln -s /usr/local/mongodb/lib/* /usr/local/lib/ $ sudo ln -s /usr/local/mongodb/include/* /usr/local/include/
どこに置くか迷ってTwitterでつぶやいたら、/usr/local か ~/local がいいよと教えてもらいました。
最初は ~/local にしようかと思ったけど、あんまり PATH 通す場所を増やすのもよくないかと思い直し、/usr/local にしました。
/usr/local はソースコードからコンパイルしたものってイメージがあったんですよね。
でも、もう他にもバイナリをダウンロードして導入したコマンドとか、忘れてたけど実はあったので。
/usr/local が root:wheel なので、それに倣います。
ただ、なぜか自分の環境では /usr/local/include と /usr/local/lib だけ、myuser:admin になってて、/usr/local/bin や /usr/local/share は root:wheel なんですよね。
たしか /usr/local は最初は空っぽだった気がするので、この辺は自分で作ってるはずなんですが、なんでこんな設定にしたんだろう・・・
まぁあと、/usr/local/bin にPATHが通ってるのでシンボリックリンクを作成したけど、lib と include まで必要だったかは不明。
起動
$ ls /usr/local/mongodb/bin/ mongo mongodump mongofiles mongorestore mongosniff mongod mongoexport mongoimport mongos mongostat
10個ほどコマンドがありますが、起動は mongod です。
たぶん Mongo daemon なんでしょう。
データベースファイルのパス
そのまま起動すると /data/db/ (または c:\data\db) にデータベースファイルを置くみたいです。
そんな場所に作られるのは嫌なので、--dbpath オプションで場所を指定します。
$ mongod --dbpath ~/tmp/mongodb Tue Jun 15 02:01:44 Mongo DB : starting : pid = 15695 port = 27017 dbpath = /Users/myuser/tmp/mongodb master = 0 slave = 0 32-bit ** NOTE: when using MongoDB 32 bit, you are limited to about 2 gigabytes of data ** see http://blog.mongodb.org/post/137788967/32-bit-limitations for more Tue Jun 15 02:01:44 Assertion: 10296:dbpath (/Users/myuser/tmp/mongodb) does not exist 0x68572 0x247814 0x24821a 0x24a855 0x1e06 0 mongod 0x00068572 _ZN5mongo11msgassertedEiPKc + 514 1 mongod 0x00247814 _ZN5mongo14_initAndListenEiPKc + 548 2 mongod 0x0024821a _ZN5mongo13initAndListenEiPKc + 42 3 mongod 0x0024a855 main + 4917 4 mongod 0x00001e06 start + 54 Tue Jun 15 02:01:44 exception in initAndListen std::exception: dbpath (/Users/myuser/tmp/mongodb) does not exist, terminating Tue Jun 15 02:01:44 dbexit: Tue Jun 15 02:01:44 shutdown: going to close listening sockets... Tue Jun 15 02:01:44 shutdown: going to flush oplog... Tue Jun 15 02:01:44 shutdown: going to close sockets... Tue Jun 15 02:01:44 shutdown: waiting for fs preallocator... Tue Jun 15 02:01:44 shutdown: closing all files... Tue Jun 15 02:01:44 closeAllFiles() finished Tue Jun 15 02:01:44 dbexit: really exiting now
エラーで起動しませんでした。--dbpathで指定したディレクトリが無いと起動しません。
$ cd ~ $ mkdir tmp $ mkdir tmp/mongodb $ mongod --dbpath ~/tmp/mongodb & Tue Jun 15 02:02:03 Mongo DB : starting : pid = 15697 port = 27017 dbpath = /Users/myuser/tmp/mongodb master = 0 slave = 0 32-bit ** NOTE: when using MongoDB 32 bit, you are limited to about 2 gigabytes of data ** see http://blog.mongodb.org/post/137788967/32-bit-limitations for more Tue Jun 15 02:02:03 db version v1.4.3, pdfile version 4.5 Tue Jun 15 02:02:03 git version: 47ffbdfd53f46edeb6ff54bbb734783db7abc8ca Tue Jun 15 02:02:03 sys info: Darwin broadway.local 9.8.0 Darwin Kernel Version 9.8.0: Wed Jul 15 16:55:01 PDT 2009; root:xnu-1228.15.4~1/RELEASE_I386 i386 BOOST_LIB_VERSION=1_40 Tue Jun 15 02:02:03 waiting for connections on port 27017 Tue Jun 15 02:02:03 web admin interface listening on port 28017
ちゃんとディレクトリを作ったら起動しました。
ついでに最後に & を置いてバックグラウンドで動かします。
ポート28017番をListenして、ポート28017番にwebインターフェースの管理画面があるようです。
localhost:28017
リッチな管理画面を期待しましたが、画像の通りかなり質素な感じです。
MongoDBには、Http Interfaceが付属しているようです。
CouchDBと違って、データの更新等は行えないようですが、
・サーバーのステータス
・登録されているデータの参照
これらが行えるようですので、デバッグに使えると思います。中略
http://[サーバーIP]:28017/[データベース名]/[コレクション名]/
にアクセスすると、該当コレクションに登録されてるデータが表示されます。
※最後のスラッシュは必須です。試しにhttp://[サーバーIP]:28017/test/foo/にアクセスすると、こんな感じで
MongoDBのHttp Interface - Symfoware
登録されているデータが表示されました。
どうやら、スクリーンショットを撮った画面以外に、どんなドキュメントが格納されているかを確認できるようです。
まだ何もデータが無いので、スクリーンショットはありませんけど。
JavaScriptシェル
$ mongo MongoDB shell version: 1.4.3 url: test connecting to: test type "help" for help > show dbs admin local
MongoDBのコマンドラインクライアントはJavaScriptシェルになってます。
とりあえず、動いてるみたいです。
参考
*1:マニュアルが無いらしく、man xattrしても使い方が分かりません。