mongodb を M1 Macbook Pro で brew upgrade したら、それまで動いていたのが動かなくなった件。
対応後にとりあえず自分のメモ用に書いているので、きちんとまとまっていませんが、ヒントにはなると思います。
やったこと
元々 mongodb@6 が入っていた Mac で、brew upgrade したら mongodb@7 になったが、mongosh を起動しようとすると、
MongoNetworkError: connect ECONNREFUSED 127.0.0.1:27017
になる。このメッセージ自体は、socketへの接続が出来ないというエラー。
要は、mongod が動いていないということ。
brew services では、正常に動いたように見えるが実際にはエラーで動いていない。log を見ると exit しているので分かる。
この動いていない原因は多数あるらしいので、ネットで調べてもかなり昔から沢山出てくるので、なかなかヒットしない。
私のケースでは、どうも、6.0以前と7.0以降はコンパチビリティがないのでエラーになるっぽい。(と書いてあるサイトを見たのだが、後から探すと見つからない、、。)
ところが、 brew uninstall とか brew reinstall ではデータ(設定ファイルも?)が消えないので、再インストールしても状態が変わらない。データを残す方法もあるっぽいけど、自分は不要なのでとりあえず手で全部消す。
(もしかしたら、設定ファイルだけの問題かもしれないけど未確認。)
また、色々操作していると、brew services startを root で起動しろというメッセージが出てくるが、これをやるといくつかのファイルのownerがrootになってしまう。典型的なのは、socket(/tmp/mongoなんちゃら)がrootになってしまう。brew services で自動起動に設定すると、ownerは自分自身なので、途中で使うファイルの owner が root だと色々失敗する。(次やる時は、rootでの実行をしないようにすれば良いと思う。もう1台あるのでそれで試す。)
mongod を root で起動すると動くけど、services での起動では失敗するようになったら、ログを見ながらファイルのowner を変更するとそのうち動くようになる。
(もしかしたら、こっちだけの問題かもしれない。)
別マシンで確認
こっちも brew upgrade でエラーになった。機種は M1 Macbook Air。
以下の手順で動いた
- 自動起動をやめる
- brew uninstall
- データ(/opt/homebrew/var/mongodb)を全部消す
- 念の為、socketも消す。再起動
- brew install, brew services start
- OK
mongodb の公式ページを見ると、6.0から7.0へのupgradeの方法が書いてあるのを見つけたので、この通りやれば良いのかもしれないけど、すでに 7.0 になってエラーで焦っている状態だともう遅いかも。