mysqlのERROR! The server quit without updating PID file解決しました

##　事象

`mysql＠8.0`をインストールをしたのですが、アップデートでパスワード形式に変更があったらしく、`node.js`とうまく噛み合いませんでした。

なので、旧式のパスワード形式に変更したいと思い、権限変更したり、アンストインスト繰り返し試していたところ、動かなくなりました。

```
# スタートできない

$ mysql.server start
Starting MySQL
.. ERROR! The server quit without updating PID file (/usr/local/var/mysql/XXXXXXXX.local.pid).

# stopできない

$ mysql.server stop
 ERROR! MySQL server PID file could not be found!

# セーフ起動できない

$ mysqld_safe
2017-06-24T08:14:13.6NZ mysqld_safe Logging to '/usr/local/var/mysql/XXXXXX.local.err'.
2017-06-24T08:14:13.6NZ mysqld_safe Starting mysqld daemon with databases from /usr/local/var/mysql
2017-06-24T08:14:14.6NZ mysqld_safe mysqld from pid file /usr/local/var/mysql/XXXXXXX.local.pid ended
```


## 再インストールで治るか検証



```
$ brew uninstall mysql
$ brew install mysql

$ mysql.server start
Starting MySQL
.. ERROR! The server quit without updating PID file (/usr/local/var/mysql/XXXXXXXX.local.pid).
```

`/usr/local/var/mysql/XXXXXXXX.local.pid`が一時的に作られてるらしいのですが`$ mysql.server start`中に消えてしまう現象が発生しています。

理由としては、クラッシュしたファイルをアップデートすることを`mysql`が許してないみたいです

## 参考にした記事（コピペ）

`$ brew uninstall mysql`でも消えないファイルがあるらしいので下記記事をコピペをして消去の対応をしました

[mysqlがどうしても起動しない](https://qiita.com/_natsu_no_yuki_/items/ae4c94187093e4ab3cdc)
@_natsu_no_yuki_




[どうしよう！困った時のMac上のMySQLのアンインストール＆再インストール、動作確認手順](https://qiita.com/akiko-pusu/items/aef52b723da2cb5dc596)
@akiko-pusu






## /usr/local/var/mysql/XXXX.local.errの確認


かなり参考になったので、下記記事の引用貼っときます。エラーログは私の実際のログに置き換えときました。

>>https://gihyo.jp/dev/serial/01/mysql-road-construction-news/0096

>```
$ cd /usr/local/var/mysql/
$ ls *.err
MacBook2.err
```
>今回は`MacBook2.err`と言う名前でしたが，ホストや実行環境によって名前は変わると思うので適宜変更して実行してください。

>`tail -f MacBook2.err` を行った状態で(err名は適宜置き換えて実行してください)，別のターミナルから`mysql.server start`を実行して，どのようなエラーが表示されるか確認してみましょう。

>```
$ tail -f MacBook2.err ←1つ目のターミナルで実行して待ちます
$ mysql.server start ←別のターミナルで実行します
```

>起動に失敗した場合には１つ目の`tail -f`を実行しているターミナルに以下のようなエラーログが吐き出されます。

```
#　私の実際のエラーです
xxxx@{pc名} mysql % tail -f {pc名}.local.err
2020-08-24T14:06:55.301175Z 0 [ERROR] [MY-011300] [Server] Plugin mysqlx reported: 'Setup of bind-address: '127.0.0.1' port: 33060 failed, `bind()` failed with error: Address already in use (48). Do you already have another mysqld server running with Mysqlx ?'
2020-08-24T14:06:55.301545Z 0 [ERROR] [MY-013597] [Server] Plugin mysqlx reported: 'Value '127.0.0.1' set to `Mysqlx_bind_address`, X Plugin can't bind to it. Skipping this value.'
2020-08-24T14:06:55.301872Z 0 [ERROR] [MY-011300] [Server] Plugin mysqlx reported: 'Setup of socket: '/tmp/mysqlx.sock' failed, another process with PID 72895 is using UNIX socket file'
2020-08-24T14:06:55.335175Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
2020-08-24T14:06:55.335489Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.
2020-08-24T14:06:55.337415Z 0 [ERROR] [MY-010262] [Server] Can't start server: Bind on TCP/IP port: Address already in use
2020-08-24T14:06:55.337688Z 0 [ERROR] [MY-010257] [Server] Do you already have another mysqld server running on port: 3306 ?
2020-08-24T14:06:55.338189Z 0 [ERROR] [MY-010119] [Server] Aborting
2020-08-24T14:06:56.343210Z 0 [System] [MY-010910] [Server] /usr/local/Cellar/mysql/8.0.21_1/bin/mysqld: Shutdown complete (mysqld 8.0.21)  Homebrew.
2020-08-24T14:06:56.6NZ mysqld_safe mysqld from pid file /usr/local/var/mysql/{pc名}.local.pid ended
```

恥ずかしながら英語読めないマンなのでエラーコピーしてgoogle翻訳へ、すると２行目に気になる文があり
>2020-08-24T14：06：55.301545Z 0 [エラー] [MY-013597] [サーバー]プラグインmysqlxが報告： '値' 127.0.0.1 'が \`Mysqlx_bind_address`に設定されているため、Xプラグインはそれにバインドできません。この値をスキップします。」

止まっていると思っていたmysqlがじつは動いていた？説が浮上したので、それらしいファイルを強制終了させていこうと思いました。

##強制終了の流れ

1. $ sudo mysqladmin kill を実行
2. アクテビティモニターで通信を確認
3. uninstallコピぺ祭り
4. $ brew install mysqlでインストール
5. $ mysql.server startで正常に動くか確認


__1.$ sudo mysqladmin kill を実行__

強制終了するため`kill`コマンドについて調べていると[mysql公式サイト](https://dev.mysql.com/doc/refman/5.6/ja/kill.html)曰く、

>`mysqladmin processlist` および `mysqladmin kill` コマンドを使用して、スレッドを検査および強制終了することもできます。

外部から直接mysqlをいじれるコマンドらしかったので`sudo`つけてから実行しました。


__2.アクテビティモニターで通信を確認__

次にアクテビティモニターを使用して`mysql`っぽい名前が無いか確認。すると、
`mysqld`
というファイルが可動していたので、ダブルクリック→終了→強制終了で停止

__3.uninstallコピぺ祭り__

再度不要なファイルが残ってしまっている可能性があるので、再びコピペで消去してから
[mysqlがどうしても起動しない](https://qiita.com/_natsu_no_yuki_/items/ae4c94187093e4ab3cdc)

[どうしよう！困った時のMac上のMySQLのアンインストール＆再インストール、動作確認手順](https://qiita.com/akiko-pusu/items/aef52b723da2cb5dc596)


__4.$ brew install mysqlでインストール__

```
~ $ brew install mysql
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 1 tap (homebrew/core).
==> Updated Formulae
Updated 13 formulae.

==> Downloading https://homebrew.bintray.com/bottles/mysql-8.0.21_1.catalina.bottle.tar.gz
Already downloaded: /Users/shinozakimasaya/Library/Caches/Homebrew/downloads/0d017278caa06d8c2921f06801b920ebffaeb68cef50eb80973e70db449facc5--mysql-8.0.21_1.catalina.bottle.tar.gz
==> Pouring mysql-8.0.21_1.catalina.bottle.tar.gz
==> /usr/local/Cellar/mysql/8.0.21_1/bin/mysqld --initialize-insecure --user=shinozakimasaya --basedir=/usr/local/Cellar/mysql/
==> Caveats
We've installed your MySQL database without a root password. To secure it run:
    mysql_secure_installation

MySQL is configured to only allow connections from localhost by default

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
==> Summary
🍺  /usr/local/Cellar/mysql/8.0.21_1: 290 files, 291.2MB
```

__5.＄ mysql.server startで正常に動くか確認__

```
＄ mysql.server start
Starting MySQL
 SUCCESS! 
```

1.2 のどちらかが良かったのか、無事稼働してくれました。自分の場合はこうでしたが、人によってエラーが違うらしいので__/usr/local/var/mysql/xxxx.local.err__を確認しましょう。{pc名}だけ変えれば行けると思います。


`$ cd /usr/local/var/mysql/`
`$ tail -f {pc名}.local.err`
`$ mysql.server start`

##まとめ

適当にやっていたので、順番が違う可能性がありますが、工夫しながら自分に合った解決方法を見つけてみてださい。