1
1

More than 3 years have passed since last update.

Railsアプリ起動時に突然「Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)」になった時の対処法

Last updated at Posted at 2020-01-25

はじめに

Railsアプリをローカルで起動させた際に、MySQLのConnectionErrorが発生しました。先日まで問題なく起動していたのですが……。

スクリーンショット 2020-01-19 22.35.58.png

mysqlサーバーに接続する際、mysql.sockファイルを使って接続するらしいのですが、
なんらかの原因により、このファイルが消えることがあるそうです。
エラー文で指定されているところに、mysql.sockファイルを作成して再度接続してみました。

$ sudo touch /tmp/mysql.sock
$ sudo mysql.server restart
Starting MySQL
. ERROR! The server quit without updating PID file (/usr/local/var/mysql/MBP-2.local.pid).

スクリーンショット 2020-01-20 19.17.18.png

エラー画面の(2)(38)に変わっただけです。
検索するとこの類のエラーは結構頻発するらしく、まずは権限周りから触ってみました。

$ sudo chown mysql:mysql /tmp

$ sudo chmod 777 /tmp/mysql.sock

$ mysql.server start
Starting MySQL
... ERROR! The server quit without updating PID file (/usr/local/var/mysql/MBP-2.local.pid).

$ sudo touch MBP-2.local.pid

$ sudo rm /tmp/mysql.sock

$ chown -R _mysql:_mysql mysql

$ sudo chown UserName /tmp/mysql.sock
$ mysql.server start
Starting MySQL
.. ERROR! The server quit without updating PID file (/usr/local/var/mysql/マシン名.local.pid).

以上の内容を色々試してみたのですが解決せず。Macを再起動しても何も変化なしでした。
MySQLをhomebrewでインストールしていたので/usr/local/var/mysqlをディレクトリごと消去して再インストールしました。

$ sudo rm -rf /usr/local/var/mysql

$ brew uninstall mysql@5.7
Uninstalling /usr/local/Cellar/mysql@5.7/5.7.28... (319 files, 232.2MB)

$ brew install mysql@5.7
・
・
mysql@5.7 is keg-only, which means it was not symlinked into /usr/local,
because this is an alternate version of another formula.
If you need to have mysql@5.7 first in your PATH run:
  echo 'export PATH="/usr/local/opt/mysql@5.7/bin:$PATH"' >> ~/.zshrc
・
・
🍺  /usr/local/Cellar/mysql@5.7/5.7.29: 319 files, 232.3MB

再インストールだけだとパスが通っていないのでexportコマンドでパスを通すように設定します。

$ echo 'export PATH="/usr/local/opt/mysql@5.7/bin:$PATH"' >> ~/.zshrc
$ sudo vi ~/.zshrc
export PATH=/usr/local/bin:$PATH
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"
export PATH="/usr/local/opt/mysql@5.7/bin:$PATH"
$ source ~/.zshrc

まずはMySQLがインストールされているか確認します。

$ mysql --version
mysql  Ver 14.14 Distrib 5.7.29, for osx10.15 (x86_64) using  EditLine wrapper

続いてMySQL5.7を起動させます。

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

起動させるRailsアプリのデータベース設定ファイルは以下のようになっています。

database.yml
default: &default
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: test-user
  password: password-example
  socket: /tmp/mysql.sock

指定しているユーザーでMySQLに接続してみます。

$ mysql -u test-user -ppassword-example
ERROR 1045 (28000): Access denied for user 'test-user'@'localhost' (using password: YES)

接続エラーとなりました。MySQLを再インストールしたためにtest-userが消去されているようです。
試しに現在のユーザーリストを確認すると、

$ mysql -u root -p
・
・
・
mysql> SELECT user, host FROM mysql.user;
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| root             | localhost |
+------------------+-----------+
4 rows in set (0.00 sec)

確かに、ユーザーリストにtest-userが存在していませんので再度ユーザーを作成します。

$ mysql -u root -p
・
・
・
mysql> CREATE USER 'test-user'@'localhost' IDENTIFIED BY 'password-example';
Query OK, 0 rows affected (0.12 sec)


mysql> SELECT user, host FROM mysql.user;
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| root             | localhost |
| test-user        | localhost |
+------------------+-----------+
5 rows in set (0.00 sec)

ユーザーの作成ができたので権限付与も合わせて行います。今回はテストなので全てのデータベースにアクセスできる権限を付与しました。

mysql> GRANT ALL ON *.* TO 'test-user'@'localhost';
Query OK, 0 rows affected (0.05 sec)

再度、MySQLに接続してみます。

$ mysql -u test-user -ppassword-example
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  
・
・
・
mysql>

接続できましたので、続いてデータベースを作成します。

$ bundle exec rails db:create
Created database '[アプリケーション名]_development'
Created database '[アプリケーション名]_test'

未実行のマイグレーションファイルを全て実行し、データベースにテーブルを作成します。

$ bundle exec rails db:migrare
== 20200117122858 DeviseCreateUsers: migrating ================================
-- create_table(:users)
   -> 0.0093s
-- add_index(:users, :email, {:unique=>true})
   -> 0.0302s
・
・
・

以上で設定終了です。再度Railsアプリを立ち上げてみます。
スクリーンショット 2020-01-25 6.40.58.png

無事に立ち上がりました。急にエラーが出て結構焦りましたが、いい勉強になりました。

参考記事

https://qiita.com/tosite0345/items/3f346780e14feca48f55
https://weblabo.oscasierra.net/mysql-57-homebrew-install/
https://qiita.com/gatapon/items/92b942fa7081cfe17482
https://qiita.com/kskumgk63/items/b308c0a688c358b17162
https://qiita.com/pugiemonn/items/718b7360028286c5b626

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1