#背景
phpの学習中にmysqlをいじっていましたw
急にmysqlが起動できなくなり、エラー解消にほぼ半日躓いてしまったので、
その解決策と試したことを記事としてのせたいと思う!!
#mysqlでのエラー文との遭遇
###エラー内容一覧
###mysqlを起動を確かめる
mysql.server start
Starting MySQL
. ERROR! The server quit without updating PID file (/usr/local/var/mysql/ユーザーMBP.pid).
意味はpidファイルを更新せずに終わったよ!ってエラー?
すいません、、、意味がわかりません(涙)
##pidファイルとは?
Pidファイルには、特定のプログラムのプロセスID(番号)が含まれています。たとえば、Apache HTTPDはメインプロセス番号をpidファイル(通常のテキストファイル、それ以上のもの)に書き込み、後でそこに含まれる情報を使用して停止します。 cat filename.pid | xargs killを使用して、その情報を使用して自分でプロセスを強制終了することもできるみたいです。
#ググって試したこと!
##①権限関係
権限確認すると「_mysql:_mysql」だったので、自分:adminに変更した。
chown -R [ユーザ名] /usr/local/var/mysql
うまくいかず。
##②エラーログ確認しにいく
cd /usr/local/var/mysql
ls (lsコマンドでmysqlディレクトリの中身を確認する)
その中に
(ユーザー)MBP.err というファイルがあるので
cat (ユーザー)MBP.err (catコマンドでファイルの中身を確認)
エラーログの中身に
2020-03-16 17:32:04 25993 [ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.user' doesn't exist
調べてみると、インストール時に mysql_install_db が実行されるが、ディレクトリがわからない状態らしい。
インストール場所とユーザ名を指定して明示的に実行すると良さそうらしいですが、、
mysql_install_db --datadir=/var/lib/mysql --user=mysql
うまくいかず...
参考ページ
https://qiita.com/840_/items/06f32fecbe57c3fdf5ec
##③最終手段 全てをアンイストール!!
よく見るとmysql、mysql@5.6、mysql@5.7やらいっぱいmysqlが存在してしまっていたので全てアンインストール!
の前に
*実行前に
そのまま解決手順を実行してしまうと、mysqlのデータが削除されてしまいます。
以下の手順を実行し、バックアップを行ってください!!
$ brew services stop mysql
mysqlを一旦停止
$ cp -pr /usr/local/Cellar/mysql /適当な場所/mysql_backup
これで、mysqlのデータバックアップ。
brew uninstall mysql
brew uninstall mysql@5.6
brew uninstall mysql@5.7
まずはmysqlをアンインストール!
##次にlocal配下のmysqlを全て削除する
$ rm -rf /usr/local/mysql
$ rm -rf /Library/StartupItems/MYSQL
$ rm -rf /Library/PreferencePanes/MySQL.prefPane
$ rm -rf /Library/Receipts/mysql-.pkg
$ rm -rf /usr/local/Cellar/mysql*
$ rm -rf /usr/local/bin/mysql*
$ rm -rf /usr/local/var/mysql*
$ rm -rf /usr/local/etc/my.cnf
$ rm -rf /usr/local/share/mysql*
$ rm -rf /usr/local/opt/mysql
###ポイント!
brew uninstall mysqlでは削除できないファイル群を削除するのが大事!
残っているとアンインストールしても解消されないので、すっきり全て削除!
##mysqlを再インストール
brew install mysql(@__使用するmysqlバージョンを指定)
mysqlコマンドをどこからでも実行できるようする
$ echo 'export PATH="/usr/local/opt/mysql/bin:$PATH"' >> ~/.bash_profile
mysqlバージョンを指定している場合(mysql@5.6)
$ echo 'export PATH="/usr/local/opt/mysql@5.6/bin:$PATH"' >> ~/.bash_profile
$ source ~/.bash_profile
mysqlのコマンドが打てるか確認する
$ which mysql
以下のように表示されれば成功
/usr/local/opt/mysql/bin/mysql
最後にmysqlを起動
mysqlの状態を確認するコマンドです
$ mysql.server status
以下のように表示されれば成功
SUCCESS! MySQL running (29385)
他にもプロセスを確認
$ ps ax | grep mysql
29714 s001 S 0:00.03 /bin/sh /usr/local/Cellar/mysql/8.0.19/bin/mysqld_safe --datadir=/usr/local/var/mysql --pid-file=/usr/local/var/mysql/ユーザMBP.pid
29825 s001 S 0:05.17 /usr/local/Cellar/mysql/8.0.19/bin/mysqld --basedir=/usr/local/Cellar/mysql/8.0.19 --datadir=/usr/local/var/mysql --plugin-dir=/usr/local/Cellar/mysql/8.0.19/lib/plugin --log-error=ユーザMBP.err --pid-file=/usr/local/var/mysql/ユーザMBP.pid
29837 s001 S+ 0:00.00 grep mysql
ok問題ないですね!
参考
https://teratail.com/questions/199085
これでようやく解決してくれました!
###本当に強引な方法ではありますがうまくいきました!
#最後に
本当によく躓くエラーなので反省をとこれからの課題として記事として残しておきます!!