先日、homebrewでmysqlをインストールして起動しようとしたらうまく行かなかったので、その対処法を紹介します。
【起きていた現象】
・brew services listでは「mysql started」になっている
・mysql -urootすると「Access denied for user 'root'@'localhost' (using password: YES)」になってしまう
・mysql.server startすると「The server quit without updating PID file (/usr/local/var/mysql/***.local.pid).」が出る
【前提】
・homebrewでmysqlをインストール済み
・which mysqlで「/usr/local/opt/mysql/bin/mysql」と表示される
・mysql --versionで正常にバージョン表示される
前提を満たしていない場合は、以下のコマンドでmysqlをインストールしてください
brew install mysql
【ERROR! The server quit without updating PID file (/usr/local/var/mysql/***.local.pid).】に遭遇してmysql.server startできない
本題の「The server quit without updating PID file (/usr/local/var/mysql/***.local.pid).」の解決方法です。
結論から話すと、以下のコマンドを叩いて、エラーを確認しましょう。
less /usr/local/var/mysql/$(uname -n).err
自分の場合は次のようなエラーが出ていました。
2021-07-18T00:29:49.300900Z 0 [ERROR] [MY-010270] [Server] Can't start server : Bind on unix socket: Address already in use
2021-07-18T00:29:49.301717Z 0 [ERROR] [MY-010258] [Server] Do you already have another mysqld server running on socket: /tmp/mysql.sock ?
そこで以下の順序で対応しました。
$(uname -n).local.pidを作成
そもそも、***.local.pidが存在しないかなと思ったので、一応作成コマンドを叩きました。
以下を実行して、実行中のシステム名を表示します。
$(uname -n)
表示されたシステム名をもとに、pidファイルを以下コマンドで生成します。
touch さきほど表示されたシステム名.local.pid
sudo rm /tmp/mysql.sockを実行
/tmp/mysql.sockを消しました。
sudo rm /tmp/mysql.sock
他の実行中のmysqldを削除
以下のコマンドでmysqldのプロセスを表示。
ps aux |grep mysql
既存のプロセスはキルしました。
(終了させる)
kill -9 番号
ちなみに、プロセスの番号(ID)はps aux |grep mysqlして表示される以下の
あなたのマシン 47390 0.0 0.0 4286840 756 s002 S+ 9:30AM 0:00.01 grep mysqld
「47390」とかです。
再度実行
再度実行してみます。
mysql.server start
うまくいきました!!
Starting MySQL
. SUCCESS!
あとは「mysql -uroot」でログインしてみましょう。
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.25 Homebrew
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
実行して、上記のように入ることができれば成功です。
他に試したこと
上記の解決に至るまでに試したことを書いていきます。
(結果的に解決につながらなかったので、意味がなかったチャレンジ達です)
①再インストール
home brewでmysqlをアンインストールして、再度インストールしました。
コマンドは以下のとおりです。
//実行中のmysqlを確認
brew services list
//mysqlを停止
brew services stop mysql
//アンインストール
brew uninstall mysql
//再インストール
brew install mysql
無事にインストールされれば、以下のように表示されます
To connect run:
mysql -uroot
To have launchd start mysql now and restart at login:
brew services start mysql
Or, if you don't want/need a background service you can just run:
mysql.server start
ここで「brew services start mysql」だとうまくいくのに、「mysql.server start」だと失敗するのに悩まされましたね...。
brew services start mysqlでうまくいってても、mysqlにログインしようとするとAccess deniedになるので、結局本質的にはうまくいってないのでしょうね。
rew services start mysqlで「Successfully started」と出るのは意味合い的には「mysqlサーバーが正常に起動されましたよ」ということで、MySQLサーバー自体がログインできる状態であるかまでは見てくれていないと思います。
✔ 直接成功につながらなかった
ネットでググっていると「再インストールでうまくいきましたよ」みたいな記事も見ましたが、僕の場合はうまくいきませんでした。
というか、今回の反省点なのですが、何も考えずに再インストールする前にエラー見るべきでした。
②mysqlのセーフティモードでの起動
brew services start mysqlはうまくいってるし、問題はmysqlへのログインなので、セーフティモードで起動してしまえば問題ないのでは?と考えて、以下のコマンドを実行してみました。
mysqld_safe --skip-grant-tables &
この状態で別ウィンドウなりでmysqlにログインしてみましたが、やはり結果はAccessDeniedでした。
結論:エラーを見ましょう
ということで、今回はmysql.server startすると「The server quit without updating PID file (/usr/local/var/mysql/***.local.pid).」が出る場合の対処法について解説しました。
結論は「エラーを見ましょう」です。
less /usr/local/var/mysql/$(uname -n).err
上記を実行すれば、失敗の原因は書かれています。
あとは1つ1つ確認していけばOKです。
さきほども話しましたが、僕はエラーを見ないで、「brew services start mysql」ではうまくいくのに、(いっているように見えるのに)「mysql.server start」で失敗するのはなぜだ?ということばかりに気をとられて無駄な時間を過ごしました...。
あなたは同じ過ちをしないようにしてくださいね。
今回は以上です。