【MySQL】Can't connect to local MySQL server through socket '/tmp/mysql.sock'や ERROR! PID file...などを解決！！

# 概要
* ほぼ1日mysqlで頭を抱えて溶けそうになったので、解決方法を残しておきます。

## 前提・環境
* Mac
    * 機種ID：MacBookPro18,3
    * macOS：Monterey
    * チップ：　Apple M1 Pro
    * メモリ：　16GB

* brewでmysqlをインストールしています
* 元々、brewでmysql@5.7とmysqlを入れていましたが、mysql@5.7をuninstallしたところから本記事になりますので、最新バージョンは以下バージョンのもので試行錯誤していました
    * `mysql  Ver 8.0.31 for macos12.6 on arm64 (Homebrew)`
    * 5.7でPATH通す云々で一悶着ありましたが、bash_profileは本記事と関係ないのでカットしています

* 多くの記事で記載のあった以下項目は既に実施済みですが、何も変わりませんでした
    * 再起動しよう
    * 不要なプロセスをkillコマンドで消しましょう
    * brewでmysqlをアンインストール・インストールする（再インストール）

## 参考記事・助けてもらった先人の知恵
* [MySQLが起動しない（Can't connect to local MySQL server ~~）](https://zenn.dev/ogakuzuko/articles/6958a35833d4fd)
* [mysqlが起動できない](https://qiita.com/hondy12345/items/d32ed749fb49e9da7de6)
* [【MySQL】pid not foundもしくはpermission deniedの対応方法](https://qiita.com/a-kym/items/36b73edd9d1e666ae0c0)
* [MySQL起動エラーの対処の仕方【Can't connect to local MySQL server through socket '/tmp/mysql.sock' (38)】](https://qiita.com/k-yasuhiro/items/95a60618d9743e3749a2)
* [MySQL start しない PID ファイルがないエラーを socket ファイルが入っている /tmp の所有者とグループを _mysql に変えることで解決した](https://kei-s-lifehack.hatenablog.com/entry/resolved-mysql-pid-error)
* [mysql 起動時のThe server quit without updating PID file エラーの回避法](https://qiita.com/jonakp/items/477a18d4a94c01a31583)

# エラー対応手順

* なぜか、mysqlコマンドを打つと弾かれるようになってしまった。

* `$ mysql`

```terminal
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
```

* MySQLでは、サーバーとクライアントを接続するときに、ソケットを使っているらしいが、どうやらこのsocketファイルがうまく使えていないらしい。なぜ消えてしまったいるのかは不明。
    * socketファイルを作れば良いという記事が多かったので、`touch /tmp/mysql.sock`を実行してから`mysql -u root`実行すると、

```terminal
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (38)
```

* 2が38になりやがった...なんなんだ！
    * socketファイルがいるディレクトリ/tmpに権限を与えるという、先人の知恵を借りて以下コマンドも実施
    * `chmod 777 /tmp/mysql.sock`で所有権を与え、
    * `mysql.server restart`でリスタートしてみる

* さあ、来い！！　しかしーー
```terminal
 ERROR! MySQL server PID file could not be found!
```

* なんやねん！そんな怒らんでも。

* 先ほどのエラーメッセージは、「プロセスのIDが記録されているPIDファイルがない」というエラー。つまり、PIDを作ればいける！という記事を見つけたので、以下を実施。
    * `cd /opt/homebrew/var/mysql`にいって、（一応mysqlディレクトリが生きているか確認するために移動）
    * `sudo touch ********.local.pid`を実施！

* pid ファイルとは、サービス起動時に作成されるらしいので、`mysql.server start`を再度実施すればいけるか...!!

``` 
ERROR! The server quit without updating PID file (/opt/homebrew/var/mysql/********.local.pid).
```

* やっぱりダメです...とほほ(^^;)
    * ********はマシン名が入っています


* さて。/opt/homebrew/var/mysql以下のファイルの所有者をすべて_mysqlにすることで解決したという記事を見つけた。
    * `sudo chown -R _mysql:_mysql /opt/homebrew/var/mysql`からの`mysql.server restart`でどうや！

```terminal
ERROR! MySQL server PID file could not be found!
```


* まじか、手強すぎｗ

* ふむぅ。`sudo chmod 777 /opt/homebrew/var/mysql`を行ってから、`mysql.server start`を実施してみるが、

```terminal
 ERROR! The server quit without updating PID file (/opt/homebrew/var/mysql/********.local.pid).
```

* やっぱり君だよね（


* 再びしばらくぐぐっていると、`brew uninstall mysql`では消えないものがあるらしい。local配下のmysqlを全て削除してからもう一度再インストールしてみることに。
    * コマンドは上記記事を参考にしました

```terminal
$ 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*
```

* そして再インストールを実施

```terminal
brew uninstall mysql
brew install mysql
```

* すると、インストールメッセージの中に気になるERRORメッセージを発見！！

```terminal
2022-12-28T06:52:37.954850Z 0 [System] [MY-013169] [Server] /opt/homebrew/Cellar/mysql/8.0.31/bin/mysqld (mysqld 8.0.31) initializing of server in progress as process 42594
2022-12-28T06:52:37.956662Z 0 [ERROR] [MY-010457] [Server] --initialize specified but the data directory has files in it. Aborting.
2022-12-28T06:52:37.956679Z 0 [ERROR] [MY-013236] [Server] The designated data directory /opt/homebrew/var/mysql/ is unusable. You can remove all files that the server added to it.
2022-12-28T06:52:37.956714Z 0 [ERROR] [MY-010119] [Server] Aborting
2022-12-28T06:52:37.957673Z 0 [System] [MY-010910] [Server] /opt/homebrew/Cellar/mysql/8.0.31/bin/mysqld: Shutdown complete (mysqld 8.0.31)  Homebrew.
```

* ↓ここです！ 

```
/opt/homebrew/var/mysql/ is unusable. You can remove all files that the server added to it.
```


* ここに注目して、`/opt/homebrew/var/`にあるmysqlディレクトリを丸ごと削除。
* `mysql -u root`を実行してもこの状態。

```terminal
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
```

* mysqlディレクトリ消したから、これはもう一度再インストやな？　早速実施！！

```terminal
brew uninstall mysql
brew install mysql
```

* すると、先ほどの[ERROR]が消えました！おおっー！？

* `mysql -u root`　を実行すると、、

```terminal
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.31 Homebrew

Copyright (c) 2000, 2022, Oracle and/or its affiliates.
```

キタァーー！！！！！！！！

* `mysql.server start`と打つと、、、

```terminal
Starting MySQL
 SUCCESS!
```

キタァーー！！！！！！！！！！！！！！！！！！！！！！！！！！！！！！

久しぶりに見た、この　

「「「SUCCESS!」」」

一緒に叫んでやろうかと思いました。

以上、mysqlとの長い戦いでした！！！

# 補足
## ①brew services start mysqlとmysql.server startについて
* brew services start mysql : Macの再起動後に自動的にSQLが再起動される
* mysql.server start : Macの再起動後に自動的にSQLが再起動されない
    * 参考：[「brew services start mysql」と「mysql.server start」の違い](https://qiita.com/yamayamasou/items/3f54afad6448a3ddb652)
    
## ②MySQL 8.0とMySQL 5.7について
* 8.0になってパフォーマンスが2倍高速になったらしい
* ほか、こちらの記事に詳細があります
    * [MySQL 8.0 への移行が完了しました ～さようなら全ての MySQL 5.7～](https://blog.cybozu.io/entry/2021/05/24/175000)
    * [MySQLのバージョンごとの違いについて調査した](https://qiita.com/yu_tomori/items/d82ec3e58189e5291c0c)
* 公式：[2.11.4 MySQL 8.0 での変更](https://dev.mysql.com/doc/refman/8.0/ja/upgrading-from-previous-series.html)