メモ。
3 年前にも書いたが、今これを読みながらインストールしたらいろいろ情報が古くなっていたので改めて。
環境
- Mac OS X Yosemite 10.10.5
- Homebrew 1.3.1
- MongoDB 3.4.7
MongoDB の特徴
↑の記事を参照。
インストール手順
基本的には公式ドキュメントに従ってインストールすれば OK。
Install MongoDB Community Edition on OS X — MongoDB Manual 3.4
1. Homebrew をアップデートする
$ brew update
2. MongoDB をインストール
$ brew install mongodb
でインストールされる。
3. プロセスの起動
先ほどのインストールの最後に
To have launchd start mongodb now and restart at login: brew services start mongodb Or, if you don't want/need a background service you can just run: mongod --config /usr/local/etc/mongod.conf
というメッセージが表示される。
Homebrew Services という機能を使って、再起動後もプロセスが自動起動するように設定するには
$ brew services start mongodb
を実行する。
そうではなく、一回限りの起動を行う場合は
$ mongod --config /usr/local/etc/mongod.conf
を実行する。
4. mongo コマンドの実行
3 でプロセスを起動した状態で
$ mongo
を実行する。
$ mongo MongoDB shell version v3.4.7 connecting to: mongodb://127.0.0.1:27017 MongoDB server version: 3.4.7 Server has startup warnings: 2017-08-19T23:23:55.973+0900 I CONTROL [initandlisten] 2017-08-19T23:23:55.973+0900 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database. 2017-08-19T23:23:55.973+0900 I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted. 2017-08-19T23:23:55.973+0900 I CONTROL [initandlisten] > show dbs # データベース一覧を表示 admin 0.000GB local 0.000GB
注意
ちょっとハマった点について。
config ファイルの場所
↑のコマンドからもわかるように、/usr/local/etc/mongod.conf
という設定ファイルが作成されている。
中身はこんな感じ。
systemLog: destination: file path: /usr/local/var/log/mongodb/mongo.log logAppend: true storage: dbPath: /usr/local/var/mongodb net: bindIp: 127.0.0.1
ログ・ファイルや DB ファイルへのパスが指定されていることがわかる。
注意点として、 mongod
コマンド実行時にデフォルトでこの設定ファイルが読み込まれるわけではない 。
DB ファイルのパス
設定ファイルに /usr/local/var/mongodb
と書かれているのでこれがデフォルトかと思ったら違うらしい。
/data/db
というパスのようだ。
参考:https://docs.mongodb.com/manual/reference/configuration-options/#storage.dbPath
また、このディレクトリは自動的に作られるわけではないので、mongod
コマンドを --config
オプションなしで実行する場合は事前に
$ mkdir -p /data/db
でディレクトリを作成しておく必要がある。 Read/Write 権限も必要。
これをやらずに mongod
コマンドだけを実行すると
2017-08-19T23:43:14.258+0900 I CONTROL [initandlisten] MongoDB starting : pid=47588 port=27017 dbpath=/data/db 64-bit host=yama.local 2017-08-19T23:43:14.259+0900 I CONTROL [initandlisten] db version v3.4.7 2017-08-19T23:43:14.259+0900 I CONTROL [initandlisten] git version: cf38c1b8a0a8dca4a11737581beafef4fe120bcd 2017-08-19T23:43:14.259+0900 I CONTROL [initandlisten] OpenSSL version: OpenSSL 1.0.2l 25 May 2017 2017-08-19T23:43:14.259+0900 I CONTROL [initandlisten] allocator: system 2017-08-19T23:43:14.259+0900 I CONTROL [initandlisten] modules: none 2017-08-19T23:43:14.259+0900 I CONTROL [initandlisten] build environment: 2017-08-19T23:43:14.259+0900 I CONTROL [initandlisten] distarch: x86_64 2017-08-19T23:43:14.259+0900 I CONTROL [initandlisten] target_arch: x86_64 2017-08-19T23:43:14.259+0900 I CONTROL [initandlisten] options: {} 2017-08-19T23:43:14.263+0900 I STORAGE [initandlisten] exception in initAndListen: 29 Data directory /data/db not found., terminating 2017-08-19T23:43:14.263+0900 I NETWORK [initandlisten] shutdown: going to close listening sockets... 2017-08-19T23:43:14.263+0900 I NETWORK [initandlisten] shutdown: going to flush diaglog... 2017-08-19T23:43:14.264+0900 I CONTROL [initandlisten] now exiting 2017-08-19T23:43:14.264+0900 I CONTROL [initandlisten] shutting down with code:100
というようにエラーで落ちる。
brew services start mongodb
では config ファイルは読み込まれているのか?
自動起動の方のコマンドを使った場合、/data/db
がなくても特にエラーにならない。ということで config ファイルが読み込まれているのだろうと推測できるが、
$ brew services list Name Status User Plist mongodb started yamazaki /Users/yamazaki/Library/LaunchAgents/homebrew.mxcl.mongodb.plist redis stopped
で homebrew.mxcl.mongodb.plist を見てみると
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>homebrew.mxcl.mongodb</string> <key>ProgramArguments</key> <array> <string>/usr/local/opt/mongodb/bin/mongod</string> <string>--config</string> <string>/usr/local/etc/mongod.conf</string> </array> <key>RunAtLoad</key> <true/> <key>KeepAlive</key> <false/> <key>WorkingDirectory</key> <string>/usr/local</string> <key>StandardErrorPath</key> <string>/usr/local/var/log/mongodb/output.log</string> <key>StandardOutPath</key> <string>/usr/local/var/log/mongodb/output.log</string> <key>HardResourceLimits</key> <dict> <key>NumberOfFiles</key> <integer>4096</integer> </dict> <key>SoftResourceLimits</key> <dict> <key>NumberOfFiles</key> <integer>4096</integer> </dict> </dict> </plist>
plist ファイルの読み方はわからないが、 ProgramArguments の後にそれらしい記述が見られるので読み込まれているのだと理解した。