初めに
phpフレームワークのLaravelでRESTfulAPIの設計をしようと思いmysqlを使ってみたところ上記のエラーが出ました。
その解決方法を残しておこうと思ったので書いておきます。
時間がなくいますぐにでも解決方法を知りたいあなたは
時間がないあなたへをみてください
もし時間があるあなたは解決までの道のりともしかしたら役に立つかもしれないをごらんください
前提条件
・mysqlをhomebrewでインストール済み
・mysql8.0系を使っていた
・mysql9.0へ移行しようと思っていた
・mysqlをなんどもインストールしては削除を繰り返してきた
これらに当てはまる方には参考になると思います
時間がないあなたへ
最速の解決方法
brew info mysql
を実行するのが最速かと思います。ここでインストールされているmysqlの情報を取得します。
するとこんな感じで情報が出てくるので"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のアンインストールとインストールを繰り返す
→僕は何回も試しましたが根本的な問題解決にはなりませんでした。
あきらめてエラーの根元を探してみることをおすすめします