【Rails】rails sでCan't connect to local MySQL server through socket エラーの解決方法

【Rails】rails sでCan't connect to local MySQL server through socket エラーの解決方法

2分で読める テック
最終更新:

Railsアプリを起動しようとして rails s を実行したときに、次のエラーが出ることがあります。

Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

「ローカルのMySQLサーバーにソケット経由で接続できない」というエラーです。原因と解決方法を整理します。

開発環境

  • Ruby: 2.5.1
  • Rails: 6.0.0

エラーの原因

原因はシンプルで、MySQLがそもそも起動していないことです。

RailsはDBに接続しながら起動しますが、その前段としてMySQLサーバーが動いている必要があります。MySQLをインストールしただけで起動を忘れていたり、PCを再起動してMySQLが自動起動していない場合にこのエラーが発生します。

解決方法

MySQLを起動します。

$ sudo mysql.server start

起動が成功すると次のメッセージが表示されます。

Starting MySQL
. SUCCESS!

その後、改めてRailsサーバーを起動します。

$ rails s

MySQLが起動できない場合

mysql.server start 自体でエラーが出る場合は、ファイルのパーミッション問題の可能性があります。その場合は次のコマンドを実行してから再度起動を試みてください。

$ sudo chown -R _mysql:_mysql /usr/local/var/mysql
$ sudo mysql.server start

まとめ

Can't connect to local MySQL server through socket エラーはほとんどの場合、MySQLが起動していないことが原因です。

まず sudo mysql.server start でMySQLを起動してから rails s を実行するようにしましょう。毎回手動で起動するのが手間な場合は、MySQLを自動起動に設定しておくと便利です。

# macOS(Homebrew)で自動起動を設定する場合
$ brew services start mysql

質問・リクエストを送る

記事についての質問や、取り上げてほしいテーマがあればお気軽にどうぞ。いただいた質問はブログ記事として回答し、Q&Aページで公開することがあります。