##起こった問題
昔に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で設定し直す。
#変更前
socket: /var/run/mysqld/mysqld.sock
#変更後
socket: /tmp/mysql.sock
これで無事動きました!!
##まとめ
mysqlに接続できない問題に丸一ヶ月費やしました。。
今回の一番の原因としては, やはりRails側のDB設定です。
github上から取ってきたものをローカルで動かすときは自分のPC環境と相違が発生することも考慮しないといけないので、これから気をつけて行きたいですね。