40
33

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?