Goal
brew install
ではなく、ソースからビルドしてmongoDBをインストールするmongo
コマンドが使え、インタラクティブモードで起動できる
Log
一応、brew
で何が落とせるか見ておく
% brew search mongo libmongoclient mongo-c mongodb mongoose % brew info mongodb mongodb: stable 2.4.8 (bottled), devel 2.5.4, HEAD http://www.mongodb.org/ Not installed From: https://github.com//homebrew/commits/master/Library/Formula/mongodb.rb # 以下略
ソースをダウンロード
ここから
Mac OS X を選択して、tgzファイルをダウンロード
% ls ~/Downloads | grep mongo mongodb-osx-x86_64-2.4.8.tgz %
解凍
ここを見れば大丈夫っぽい?
というか、curlで落としてきてはるわ。まあいいや、解凍
% mv ~/Downloads/mongodb-osx-x86_64-2.4.8.tgz ~/src/ % cd ~/src % tar -zxvf mongodb-osx-x86_64-2.4.8.tgz x mongodb-osx-x86_64-2.4.8/README x mongodb-osx-x86_64-2.4.8/THIRD-PARTY-NOTICES x mongodb-osx-x86_64-2.4.8/GNU-AGPL-3.0 x mongodb-osx-x86_64-2.4.8/bin/mongodump # 以下略 % ls | grep mongo mongodb-osx-x86_64-2.4.8 mongodb-osx-x86_64-2.4.8.tgz
とりあえずhomeに移動
% mkdir ~/mongodb % cp -R -n mongodb-osx-x86_64-2.4.8/ ~/mongodb % cd ~/mongodb % ls GNU-AGPL-3.0 README THIRD-PARTY-NOTICES bin %
ソースはあるので、起動してみる
% ~/mongodb/bin/mongo MongoDB shell version: 2.4.8 connecting to: test Mon Jan 6 15:28:26.663 Error: couldn't connect to server 127.0.0.1:27017 at src/mongo/shell/mongo.js:145 exception: connect failed
Error: couldn't connect to server
ん、サーバ立ってないからだなこれは。
サーバ立てよう
% ~/mongodb/bin/mongod /Users/otiai10/mongodb/bin/mongod --help for help and startup options Mon Jan 6 15:28:45.729 [initandlisten] MongoDB starting : pid=44486 port=27017 dbpath=/data/db/ 64-bit host=g-pc-4681.intra.gree-office.net Mon Jan 6 15:28:45.729 [initandlisten] Mon Jan 6 15:28:45.729 [initandlisten] ** WARNING: soft rlimits too low. Number of files is 256, should be at least 1000 # 以下略
んー
WARNING: soft rlimits too low.
これか
% ulimit -n 2048 % ~/mongodb/bin/mongod /Users/otiai10/mongodb/bin/mongod --help for help and startup options Mon Jan 6 15:36:48.008 [initandlisten] MongoDB starting : pid=44543 port=27017 dbpath=/data/db/ 64-bit host=g-pc-4681.intra.gree-office.net Mon Jan 6 15:36:48.008 [initandlisten] db version v2.4.8 Mon Jan 6 15:36:48.008 [initandlisten] git version: a350fc38922fbda2cec8d5dd842237b904eafc14 Mon Jan 6 15:36:48.008 [initandlisten] build info: Darwin bs-osx-106-x86-64-2.10gen.cc 10.8.0 Darwin Kernel Version 10.8.0: Tue Jun 7 16:32:41 PDT 2011; root:xnu-1504.15.3~1/RELEASE_X86_64 x86_64 BOOST_LIB_VERSION=1_49 Mon Jan 6 15:36:48.008 [initandlisten] allocator: system Mon Jan 6 15:36:48.008 [initandlisten] options: {} Mon Jan 6 15:36:48.008 [initandlisten] exception in initAndListen: 10296 ********************************************************************* ERROR: dbpath (/data/db/) does not exist. Create this directory or give existing directory in --dbpath. See http://dochub.mongodb.org/core/startingandstoppingmongo ********************************************************************* , terminating # 以下略
物理的なデータロケーションが無いっぽい
ERROR: dbpath (/data/db/) does not exist.
mongod
を立ち上げるときに色々できるっぽい。とりあえず言われた通りのことをしよう
% ls / | grep data % mkdir -p /data/db mkdir: /data/db: Permission denied % sudo mkdir -p /data/db Password: % ls /data/db %
これで、mongod
立ち上げるときに--dbpath
を与えない場合のデフォルトの物理データパスができたはず
改めて立ち上げる
% ~/mongodb/bin/mongod /Users/otiai10/mongodb/bin/mongod --help for help and startup options Mon Jan 6 15:43:47.014 [initandlisten] MongoDB starting : pid=44571 port=27017 dbpath=/data/db/ 64-bit host=g-pc-4681.intra.gree-office.net Mon Jan 6 15:43:47.014 [initandlisten] db version v2.4.8 Mon Jan 6 15:43:47.014 [initandlisten] git version: a350fc38922fbda2cec8d5dd842237b904eafc14 Mon Jan 6 15:43:47.014 [initandlisten] build info: Darwin bs-osx-106-x86-64-2.10gen.cc 10.8.0 Darwin Kernel Version 10.8.0: Tue Jun 7 16:32:41 PDT 2011; root:xnu-1504.15.3~1/RELEASE_X86_64 x86_64 BOOST_LIB_VERSION=1_49 Mon Jan 6 15:43:47.014 [initandlisten] allocator: system Mon Jan 6 15:43:47.014 [initandlisten] options: {} Mon Jan 6 15:43:47.016 [initandlisten] exception in initAndListen: 10309 Unable to create/open lock file: /data/db/mongod.lock errno:13 Permission denied Is a mongod instance already running?, terminating %
だよねー
Unable to create/open lock file: /data/db/mongod.lock errno:13 Permission denied
sudoでやろか
% sudo ~/mongodb/bin/mongod # 前略 Mon Jan 6 15:45:44.612 [websvr] admin web console waiting for connections on port 28017 Mon Jan 6 15:45:44.612 [initandlisten] waiting for connections on port 27017
立った!モンゴが立った!
バックグラウンドでサーバを立てつつ、インタラクティブなクライアントを起動する
サーバ立てる
% touch mongo.log % nohup sudo ~/mongodb/bin/mongod > ~/mongo.log& [1] 44730 %
クライアント起動
% ~/mongodb/bin/mongo MongoDB shell version: 2.4.8 connecting to: test Welcome to the MongoDB shell. For interactive help, type "help". For more comprehensive documentation, see http://docs.mongodb.org/ Questions? Try the support group http://groups.google.com/group/mongodb-user >
このまま使ってみよう
> db.name test.name > db.createCollection('unkos') { "ok" : 1 } > db.unkos.insert({name:'otiai10',status:true}) > db.unkos.find() { "_id" : ObjectId("52ca5826434bc6caa84c61a7"), "name" : "otiai10", "status" : true } > db.unkos.insert({name:'otiai11',status:false}) > db.unkos.insert({name:'otiai12',status:true}) > db.unkos.find() { "_id" : ObjectId("52ca5826434bc6caa84c61a7"), "name" : "otiai10", "status" : true } { "_id" : ObjectId("52ca5847434bc6caa84c61a8"), "name" : "otiai11", "status" : false } { "_id" : ObjectId("52ca5850434bc6caa84c61a9"), "name" : "otiai12", "status" : true } >
永続データになってるよね
> exit bye % % ~/mongodb/bin/mongo MongoDB shell version: 2.4.8 connecting to: test > db.unkos.find({status:false}); { "_id" : ObjectId("52ca5847434bc6caa84c61a8"), "name" : "otiai11", "status" : false } > db.unkos.find({status:true}) { "_id" : ObjectId("52ca5826434bc6caa84c61a7"), "name" : "otiai10", "status" : true } { "_id" : ObjectId("52ca5850434bc6caa84c61a9"), "name" : "otiai12", "status" : true } >
よしよし
DRY