がっつりとハマってしまったので自分への備忘録として残します。
原因
MYSQL@5.7をインストールしてsever.start後、MYSQL@5.6をインストールして動かそうとすると、MYSQL@5.7で使おうとしていたファイルを参照するらしい。
残っているファイルを消すことが必要になる。
経緯
ことの発端はどこかのタイミングでbrew updateをしてしまったらしく、MYSQL@8系のバージョンが入ってしまっていた。
それにより、railsでアプリケーションを立ち上げようとした時にエラーが起きてしまったので、ダウングレードしたり様々なことをやった結果、「PIDファイルがないエラー」と「権限がないエラー」の無限ループにはまり込んでしまった
現象
MYSQLサーバーを起動させようとするとエラー
$ mysql.server start
/usr/local/Cellar/mysql@5.6/5.6.43/bin/mysqld_safe: line 138: /usr/local/var/mysql/username.local.err: Permission denied
ERROR! The server quit without updating PID file (/usr/local/var/mysql/username.local.pid).
どうやら一つは権限がない、もう一つはPIDファイルがないらしい。
とりあえず権限を付与。
$ sudo chmod 777 /usr/local/var/mysql
$ mysql.server start
ERROR! The server quit without updating PID file (/usr/local/var/mysql/username.local.pid).
権限問題は消えた。
PIDファイルを作るディレクトリに移動して、touchコマンドでpidファイルを作成。
$ cd /usr/local/var/mysql
$ sudo touch prkrsignMacBookPro.local.pid
$ mysql.server start
ERROR! The server quit without updating PID file (/usr/local/var/mysql/username.local.pid).
これでもダメ。
/usr/local/var/mysqlディレクトリのファイルリストを表示したが、pidファイルがなかった。
どうやら作られても消えてしまう?らしい。
そこでこの記事を発見。
一度でも5.7を起動してしまうと、同じデータを使って5.6を起動すると次のようなエラーが出るようになります。
Starting MySQL
. ERROR! The server quit without updating PID file (/usr/local/var/mysql/ogin.local.pid).
mysqld等は動いていなかったので権限周りと思われますが、うまく解決できませんでした。
(バージョンによってディレクトリ構成が違っていたので、権限以外にも何か影響しているのかもしれません)
とのこと。
記事を参考に、
$ sudo rm -rf /usr/local/mysql
$ sudo rm -rf /Library/StartupItems/MYSQL
$ sudo rm -rf /Library/PreferencePanes/MySQL.prefPane
$ sudo rm -rf /Library/Receipts/mysql-.pkg
$ sudo rm -rf /usr/local/Cellar/mysql*
$ sudo rm -rf /usr/local/bin/mysql*
$ sudo rm -rf /usr/local/var/mysql*
$ sudo rm -rf /usr/local/etc/my.cnf
$ sudo rm -rf /usr/local/share/mysql*
$ sudo rm -rf /usr/local/opt/mysql*
<!--最後にver5.6をインストール。-->
<!--元々MYSQL@5.6が入っていて、アンインストールせずにそのままインストールしちゃいました。-->
$ brew install mysql@5.6
忘れずにPATHを通そう。
$ echo 'export PATH="/usr/local/opt/mysql@5.6/bin:$PATH"' >> ~/.bash_profile
$ source ~/.bash_profile
$ /usr/local/opt/mysql@5.6/bin/mysql.server start
Starting MySQL
. SUCCESS!
これはドヤ顔。エラー解決に8時間かけたのにたまらずドヤ顔
記事を参考にMYSQLに入れることも確認しときます。いけました。
$ /usr/local/opt/mysql@5.6/bin/mysql -u root
とりあえず所感として。
MYSQLでエラーが出たら、原因はほぼ二つ。
「PIDがなくなっている」か「権限がない」。
touchを使ってPIDファイルを作成、もしくはchmodを使って権限の再設定をまず試してみるのがいいと思います。
それで改善しないなら潔く再インストールが多分手っ取り早いです。
再インストールの場合は上記のようにMYSQLが持ってるファイルを全部消して、MYSQL@5.6をインストール、パスの設定がいいんじゃないかなと思います。
@8だったり@5.7だったり、なかなかバージョン関係でいざこざ起きやすいようなので、初めに環境構築した時のバージョンを再インストールしなおすのがいいんじゃないかなと思います。