LoginSignup
40
33

More than 3 years have passed since last update.

【Rails】ローカル環境におけるmysql接続エラー対処法【Can't connect to local MySQL server through socket】

Last updated at Posted at 2018-10-06

起こった問題

昔にcloud9(webサービス)で作ったrailsアプリを自分のパソコンにpullしてきたのだが、local環境でサーバーを立ち上げようとしたら以下のエラーが出た。

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


mysql2 (0.4.10) lib/mysql2/client.rb:89:in `connect'
mysql2 (0.4.10) lib/mysql2/client.rb:89:in `initialize'
....
....
....

socket側の設定に問題があり、localのmysqlサーバーに接続できていない状態である。

実行環境

・macOS
・mysql Ver 8.0.12 for osx10.13 on x86_64 (Homebrew)
・Rails 5.0.6

試したこと

とりあえず意味がわからなかったのでもう手当たり次第に手を動かした。

全てはここに置いてある。↓
https://teratail.com/questions/147942#

mysqlに接続できるか確認

mysql -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 28
Server version: 8.0.12 Homebrew
...

mysql> 

これは普通に接続できた。

mysql.serverを動かす

とにかくサーバーを起動させないと動かないとあったので以下を実行。

mysql.server start
SUCCESS! MySQL running (61921)

うん。普通に走ってる.

参考: https://qiita.com/hondy12345/items/d32ed749fb49e9da7de6

sockファイルを作成

mysqlサーバーに接続するときのファイルがないのでは?ということでファイルを作成.

sudo touch /tmp/mysql.sock

これでもだめなので権限でのエラー?

sudo chown mysql:mysql /tmp

しかし、特に変化はない。

参考: https://qiita.com/carotene4035/items/e00076fe3990b9178cc0

rails側で設定しているsockファイルを作成

そもそもrails側でしているsockファイルが無い!と思い作成してみた。

sudo touch /var/lib/mysql/mysql.sock

するとエラー文の末尾(2)が(38)に変わっただけで後の変化はない。

Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (38)

参考: https://qiita.com/gaogaomango/items/933a1f55004920a4323d

sockをmacの環境に合わせる

そもそもcloud9で開発しているときのRails環境に合わせにいってるからこうなるのでは?という結論にいたったので, mysqlのsockファイルがどこにあるのか確かめ,Rails側を確認することに。

まず、mysqlの環境変数を取得します。

 mysqladmin variables | grep socket
| mysqlx_socket                                            | /tmp/mysqlx.sock    |
| performance_schema_max_socket_classes                    | 10                  |
| performance_schema_max_socket_instances                  | -1                  |
| socket                                                   | /tmp/mysql.sock     |

soketは/tmp/mysql.sockにあるっぽいので
rails側のsocketで設定し直す。

config/database.yml
#変更前
socket: /var/run/mysqld/mysqld.sock
#変更後
socket: /tmp/mysql.sock

これで無事動きました!!

ref: https://stackoverflow.com/questions/19530089/getting-cant-connect-to-local-mysql-server-through-socket-var-run-mysqld-mys

まとめ

mysqlに接続できない問題に丸一ヶ月費やしました。。
今回の一番の原因としては, やはりRails側のDB設定です。

github上から取ってきたものをローカルで動かすときは自分のPC環境と相違が発生することも考慮しないといけないので、これから気をつけて行きたいですね。

40
33
2

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
40
33