mongod が起動しなかったときにしたこと

# プロローグ
```$ mongod``` とか ```$ sudo mongod``` とかやれば起動するらしいけど、これ完全に起動してないな。。

なに、`--dbpath うんたらかんたら`とか `--repair`とかつけなきゃいけないのか。やってみる。

```shell-session
$ sudo mongod --dbpath /var/db/mongo/
2017-10-09T16:36:59.649+0900 I CONTROL  [initandlisten] MongoDB starting : pid=37314 port=27017 dbpath=/var/db/mongo/ 64-bit host=**********
2017-10-09T16:36:59.649+0900 I CONTROL  [initandlisten] db version v3.4.7
2017-10-09T16:36:59.649+0900 I CONTROL  [initandlisten] git version: cf38c1b8a0a8dca4a11737581beafef4fe120bcd
2017-10-09T16:36:59.649+0900 I CONTROL  [initandlisten] OpenSSL version: OpenSSL 1.0.2l  25 May 2017
2017-10-09T16:36:59.649+0900 I CONTROL  [initandlisten] allocator: system
2017-10-09T16:36:59.649+0900 I CONTROL  [initandlisten] modules: none
2017-10-09T16:36:59.649+0900 I CONTROL  [initandlisten] build environment:
2017-10-09T16:36:59.649+0900 I CONTROL  [initandlisten]     distarch: x86_64
2017-10-09T16:36:59.649+0900 I CONTROL  [initandlisten]     target_arch: x86_64
2017-10-09T16:36:59.649+0900 I CONTROL  [initandlisten] options: { storage: { dbPath: "/var/db/mongo/" } }
2017-10-09T16:36:59.651+0900 E NETWORK  [initandlisten] listen(): bind() failed Address already in use for socket: 0.0.0.0:27017
2017-10-09T16:36:59.651+0900 E NETWORK  [initandlisten]   addr already in use
2017-10-09T16:36:59.651+0900 E NETWORK  [initandlisten] Failed to set up sockets during startup.
2017-10-09T16:36:59.651+0900 E STORAGE  [initandlisten] Failed to set up listener: InternalError: Failed to set up sockets
2017-10-09T16:36:59.651+0900 I NETWORK  [initandlisten] shutdown: going to close listening sockets...
2017-10-09T16:36:59.651+0900 I NETWORK  [initandlisten] shutdown: going to flush diaglog...
2017-10-09T16:36:59.651+0900 I CONTROL  [initandlisten] now exiting
2017-10-09T16:36:59.651+0900 I CONTROL  [initandlisten] shutting down with code:48
```
意味わからんーーー。途中から Failed とか shutdown とか now exiting とか言ってるし。諦めないでよ！
（`--repair` つけてもなんかよくわからんエラーで止まる。）

てかそもそも起動に成功したらどんな反応をするんだ。。。



# そもそもインストールできてるか確認
```shell-session
$ mongod --version
db version v3.4.9
git version: 876ebee8c7dd0e2d992f36a848ff4dc50ee6603e
OpenSSL version: OpenSSL 1.0.2l  25 May 2017
allocator: system
modules: none
build environment:
    distarch: x86_64
    target_arch: x86_64
```
できてた。

## インストールされてなければする
```shell-session
$ brew install mongodb
```
でインストール。
 `==> Summary🍺` みたいな感じが出ればOK。

ついでに `$ brew upgrade mongodb` でアップグレード（？）もしたけど、これが最終的に意味があったのかどうかは分からない。


# brew 上で mongodb が動いてるか確認

```shell-session
$ brew services list
Name     Status  User Plist
mongodb stopped   
```
とのこと。えー止まってるんかい！

## 動かす
```shell-session
$ brew services start mongodb
==> Successfully started `mongodb` (label: homebrew.mxcl.mongodb)
```
おっ！

```shell-session
$ brew services list
Name     Status  User Plist
mongodb  started mori /Users/mori/Library/LaunchAgents/homebrew.mxcl.mongodb.plist
```
おおっ！動いた。


# `/data/db` の所有権を変更
```shell-session
$ ls -l /data/ # before: 所有者は root
total 0
drwxr-xr-x  38 root  wheel  1258 10 13 14:55 db

$ sudo chown mori /data/db # /data/db の所有者を mori に変更

$ ls -l /data/ # after: 所有者は mori (私の名前は mori)
total 0
drwxr-xr-x  37 mori  wheel  1292 10 13 14:58 db
```
※ この操作が必要だったのかどうかが怪しい。


# ついに `$ mongod` ！
ではなく `$ sudo mongod`！
すると、ついに動いてるっぽい感じに！

```shell-session
$ sudo mongod
Password:
2017-10-13T15:10:42.915+0900 I CONTROL  [initandlisten] MongoDB starting : pid=83975 port=27017 dbpath=/data/db 64-bit host=***********.local
2017-10-13T15:10:42.916+0900 I CONTROL  [initandlisten] db version v3.4.9
2017-10-13T15:10:42.916+0900 I CONTROL  [initandlisten] git version: 876ebee8c7dd0e2d992f36a848ff4dc50ee6603e
2017-10-13T15:10:42.916+0900 I CONTROL  [initandlisten] OpenSSL version: OpenSSL 1.0.2l  25 May 2017
2017-10-13T15:10:42.916+0900 I CONTROL  [initandlisten] allocator: system
2017-10-13T15:10:42.916+0900 I CONTROL  [initandlisten] modules: none
2017-10-13T15:10:42.916+0900 I CONTROL  [initandlisten] build environment:
2017-10-13T15:10:42.916+0900 I CONTROL  [initandlisten]     distarch: x86_64
2017-10-13T15:10:42.916+0900 I CONTROL  [initandlisten]     target_arch: x86_64
2017-10-13T15:10:42.916+0900 I CONTROL  [initandlisten] options: {}
2017-10-13T15:10:42.917+0900 I -        [initandlisten] Detected data files in /data/db created by the 'wiredTiger' storage engine, so setting the active storage engine to 'wiredTiger'.
2017-10-13T15:10:42.917+0900 I STORAGE  [initandlisten] wiredtiger_open config: create,cache_size=3584M,session_max=20000,eviction=(threads_min=4,threads_max=4),config_base=false,statistics=(fast),log=(enabled=true,archive=true,path=journal,compressor=snappy),file_manager=(close_idle_time=100000),checkpoint=(wait=60,log_size=2GB),statistics_log=(wait=0),
2017-10-13T15:10:44.320+0900 I CONTROL  [initandlisten] 
2017-10-13T15:10:44.320+0900 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.
2017-10-13T15:10:44.320+0900 I CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.
2017-10-13T15:10:44.320+0900 I CONTROL  [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.
2017-10-13T15:10:44.320+0900 I CONTROL  [initandlisten] 
2017-10-13T15:10:44.320+0900 I CONTROL  [initandlisten] 
2017-10-13T15:10:44.320+0900 I CONTROL  [initandlisten] ** WARNING: soft rlimits too low. Number of files is 256, should be at least 1000
2017-10-13T15:10:44.362+0900 I FTDC     [initandlisten] Initializing full-time diagnostic data capture with directory '/data/db/diagnostic.data'
2017-10-13T15:10:44.363+0900 I NETWORK  [thread1] waiting for connections on port 27017

```
嬉しい。

どうやら 27017ポート で起動してるらしい。ブラウザで`http://localhost:27017/` を見てみる。

> It looks like you are trying to access MongoDB over HTTP on the native driver port.

と表示された。そう！そうなんだよ！ありがとう！


# 感想
ぜんぜんわからない。
どの操作が意味を成したのか、どれが無駄な操作だったのか。
俺たちは雰囲気で `$ mongod` をやっている。

これを読んでくださった先輩方はいろいろコメントしてくれると嬉しいです。

# 追記
いつもなら起動できるのに今回はできない っていうとき、

```shell-session
$ ps -ef | grep mongod
    0 13061     1   0 土06PM ??         0:00.02 sudo mongod
    0 13062 13061   0 土06PM ??         4:47.14 mongod
  501 46095 45067   0  7:11PM ttys006    0:00.01 grep mongod
```
で確認できたすでに `mongod`で使っているポートのプロセスを強制で殺せば、うまく起動できた。つまり、すでに `mongod`は動いていたってことなんですかね。多分そうだった。