wandabo’s Engineer Blog

プログラミングに関する記事を書いてます(初心者向け)

みんな大好き!「ActiveRecord::ConnectionNotEstablished」「Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) 」

f:id:okinawa-wandabo:20210501162720p:plain

概要

ActiveRecord::ConnectionNotEstablished の原因と解決方法の解説

結論

大抵の場合、DBサーバーが起動されてないことが原因

詳細

はい!大抵の人が出くわしたことがあるであろう代表的なエラー ActiveRecord::ConnectionNotEstablished

出たよハイハイ。これね。チャチャっと解決。。。

と行きたいところだけど、いざ解決しようとすると詰まることってあるよね?

頻発するエラーじゃないからこそ再会したときには解決方法忘れちゃってる、、、なーんてことになってたり。

なので簡単に原因と解決方法をおさらい🙋‍♂️

原因と解決方法

まずは原因。「ActiveRecord::ConnectionNotEstablished」は日本語に訳すと「ActiveRecordが接続を確立出来なかったよー」つまり「DBサーバーに接続出来なかったよー」ということ。

DBに接続出来なかった理由は大きく分けて2つ。

  • 接続先が反応しない
  • 接続に必要な情報が誤っている(これは1度解決したらもう出くわさないだろう)

(他にもネット環境が〜、とかあるけど割愛)

ということで、1つ目の可能性を疑うべく、DBサーバーが反応するか確認してみよう!

まずはこのコマンドで確認。

$ mysql.server status
ERROR! MySQL is not running

おう、、やはりDBサーバーが起動していなかった!

MacユーザーのほとんどはHomebrewを使ってMySQLをインストールしているはずなので、まずはbrew info mysqlmysqlに関する情報を確認してみる。

$ brew info mysql
mysql: stable 8.0.23 (bottled)
Open source relational database management system

-------------- (中略) --------------

MySQL is configured to only allow connections from localhost by default

To connect run:
    mysql -uroot

To have launchd start mysql now and restart at login:
  brew services start mysql
Or, if you don't want/need a background service you can just run:
  mysql.server start

-------------- (後略) --------------

こんな感じ🤔 mysqlを起動するには2通りのコマンドがあって、

  • もしPCログインのたびに自動で起動させたかったら brew services start mysql
  • そうじゃなければ mysql.server start

だそうだ。今後同じ問題に直面するのも面倒なので、最初の選択肢にしておこう。

$ brew services start mysql 
==> Successfully started `mysql` (label: homebrew.mxcl.mysql)

下記コマンドで起動できたか確認っと。

$ mysql.server status
SUCCESS! MySQL running (29958)

問題なく起動できた!ということで、ブラウザをリロードすれば先程のエラーは解決しているはずだ🙆‍♂️