0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock'(38)に悩むあなたへ

Posted at

初めに

phpフレームワークのLaravelでRESTfulAPIの設計をしようと思いmysqlを使ってみたところ上記のエラーが出ました。
その解決方法を残しておこうと思ったので書いておきます。
時間がなくいますぐにでも解決方法を知りたいあなたは
時間がないあなたへをみてください
もし時間があるあなたは解決までの道のりともしかしたら役に立つかもしれないをごらんください

前提条件

・mysqlをhomebrewでインストール済み
・mysql8.0系を使っていた
・mysql9.0へ移行しようと思っていた
・mysqlをなんどもインストールしては削除を繰り返してきた
これらに当てはまる方には参考になると思います

時間がないあなたへ

最速の解決方法

brew info mysql 

を実行するのが最速かと思います。ここでインストールされているmysqlの情報を取得します。
スクリーンショット 2025-02-06 18.57.55.png
するとこんな感じで情報が出てくるので"Caveats"を見ます。
MySQLのUpgrade手順が出てくるのでその方法を実行していきます。

1. 元々動いていたMySQLを止める

mysqlの更新には8.4のインストールが必要なのでそのインストールのために今まで動いていたmysqlを止めます。

brew services stop mysql

もしかしたらsudoがいるかも

2. mysql8.4のインストール

次にmysql8.4をインストールしていきます。

brew install mysql@8.4

3. mysql8.4の起動

インストールしたmysql@8.4を起動します

brew services start mysql@8.4

4. mysql8.4の停止

mysql@8.4を停止します

brew services stop mysql@8.4

5. mysqlの起動

mysqlを起動します

mysql.server start

それでも無理なら・・・

mysql.sockを削除します

sudo rm -f /tmp/mysql.sock

もしかしたらmysql.sockが違うところにあるかも
削除できたら⑤をもう一度行ってください。
ここまでしたらsuccessが出ると思うので

mysql -u root

でmysqlを使えることを確認してください

なぜmysqlの起動にmysql.serverをしようするのか

ここからは解決にあまり関係ないので時間がある人だけみてください
mysql@8.4の起動にはbrew servicesを使用していたのにmysql@9.0の起動にはmysql.serverを使用するのか
それはbrew servicesがmysql@9.0を対応していないかららしいです。
ChatGPTが教えてくれました。なので今後mysqlの起動や停止はmysql.serverを使用するのが無難かと思います。

解決法に至るまでの道のり

ここからは解決法に至るまでの道のりをご説明します。
ChatGPTに頼りながら思考錯誤しました。

1. brew info mysqlの実行

まずはhomebrewでインストールされたmysqlの状況を確認しました。

2. sudo brew services stop mysqlの実行

次に使っているmysqlを止めるようとしてsudoがないと怒られたのでsudoで実行しました

3. brew install mysql@8.4の実行

次にmysql@8.4をインストールしました

4. mysql -u rootの実行

mysqlをroot権限で使用できるかなと思ってやってみましたが
以下のエラー文が

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (38)

状況が変わらず絶望しましたがmysqlのサーバを起動していないことに気づきました

5. mysql.server startの実行

サーバを起動するために実行したのですが大量のログと以下のエラー文が

ERROR! The server quit without updating PID file (/usr/local/var/mysql/MacBook-Air.local.pid).

これではサーバを起動ができないよう

6. brew services stop mysqlの実行

今思えばサーバを起動していないのにこのコマンドを打つ必要はなかったと思います

7. brew services start mysql@8.4

homebrewを使ったらmysql@8.4を起動できました

8. mysql -u rootの実行

mysql@8.4を起動したのでrootで入れるかなと思ったのですが4.と同じエラーが出ました

9. brew services list

実行後mysql@8.4の状況を確認しました

Name      Status  User File

mysql@8.4 stopped ユーザー名   ~/Library/LaunchAgents/homebrew.mxcl.mysql@8.4.plist

起動したのに止まってる?どういうこと

10. mysql.server startの実行

5.と同じ状態でした。

11. ps aux | grep mysqlの実行

mysql関係のプロセスを確認してみると
grep mysqlしかありませんでした。

12. brew services stop mysqlの実行

ここにきて指示通りmysqlを停止しようとしました。mysqlは開始していないという警告が出ました。mysql@8.4を開始したのにmysqlが起動していないのは当たり前ですよね

13. brew services stop mysql@8.4の実行

ここで指示通りmysql@8.4を停止しました。成功です。

14. mysql.server stopの実行

ここでもmysqlを停止しようとしています。意味がありませんね

15. ps aux | grep mysqlの実行

mysqlのプロセスが動いていないことが確認できました

16. sudo rm -f /tmp/mysql.sockの実行

これは意味があるのか分かりませんが4.や8.で出たファイルの削除を行いました。

17. brew services start mysqlの実行

ここでエラー文が

Error: Formula `mysql` has not implemented #plist, #service or installed a locatable service file

ここからbrew servicesがmysqlには対応していないことが確認できます。

18. mysql.server startの実行

ここにきてSUCCESSが出て

mysql -u root

が使えることが確認できました。

まとめ

結局ここまでの流れを完結にまとめると最速の解決方法にいきつくと思います
このエラーに1日費やしましたやばすぎ
この記事が素早いエラー解決に役立ってくれれば幸いです。

番外編

道のりにたどり着くのために色々なことを試しました。その中で効果がありそうなこととなさそうなことをまとめます

もしかしたら効果があること

・mysql.serverファイル内のmysqld_safeの部分をmysqldに変更
→mysql9.0ではmysqld_safeは使われていないらしいので変更した

・mysqlディレクトリ(多分/usr/local/var/の下))のアクセス権を緩和
→root所有だったからユーザ所有に変更

・/tmp/mysql.sockがある確認
→あるならいいけどないなら作り直したほうがいいかも

多分効果がないこと

・mysqlのアンインストールとインストールを繰り返す
→僕は何回も試しましたが根本的な問題解決にはなりませんでした。
あきらめてエラーの根元を探してみることをおすすめします

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?