MySQL8から5.7にバージョンダウンしたらハマり散らかした話

MySQLを8系から5系にバージョンダウンしたら、沼にハマりました。。。
どなたかの役に立てたら…という思いで投稿します。
## 環境
MacOS
MySQLはhomebrewからインストール
## 実行していきます
### MySQL8のアンインストール
```bash
# @8.0でバージョンを指定（しなくても動作するかもです）
$ brew uninstall mysql@8.0
```
### MySQL5.7のインストール

```bash
# どのパッケージ(バージョン)が利用可能か確認する。5.7はインストール可能。
$ brew search mysql

# バージョン指定でインストール(自身の環境はバージョン指定しないとエラーになりました)
$ brew install mysql@5.7
```

### MySQLを起動

```bash
$ mysql.server start
```

## 第一の沼

**なぜかアンインストールしたMySQL8が起動している**
```bash
# mysqlにログイン
$ mysql -u root

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
# バージョンが8系になってる！
Server version: 8.0.11 Homebrew　←ココ

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

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.
mysql>
```

え、なぜ？どうゆうこと？
一旦`exit`で抜けて、バージョンを確認

```bash
$ mysql --version
mysql  Ver 14.14 Distrib 5.7.40, for osx10.17 (x86_64) using  EditLine wrapper
```

ちゃんと5.7がインストールされてる。。
## 第一の沼突破
MySQL8のプロセスが残っていることが原因。
参考：[https://zenn.dev/ogakuzuko/articles/1d9d20fb5cbef8](https://zenn.dev/ogakuzuko/articles/1d9d20fb5cbef8)

```bash
# プロセスを確認
$ ps aux | grep mysql

# MySQL8のプロセスをkillする(grep以外のmysqlプロセス全てkillでOK)
$ sudo kill -9 〇〇〇〇 ←PID番号を入力

# MySQL起動
$ service.start mysql
```
## 第二の沼
MySQLが起動できない…
こいつを解決するのに本当に本当に苦労しました。
```bash
# MySQL起動
$ service.start mysql

Starting MySQL
.. ERROR! The server quit without updating PID file (/opt/homebrew/var/mysql/〇〇noMacBook-Pro.local.pid).
```

MySQL嫌い…
MySQL5.7は元々このエラーの状態でした。さっきまでMySQLを起動できていたのは、MySQL8のプロセスのおかげのようです。
### 解決までの手順
①`/opt/homebrew/var/mysql/〇〇noMacBook-Pro.local.pid`のあるディレクトリに移動

```bash
$ cd /opt/homebrew/var/mysql

# 該当のファイルがないのでファイルを作成
$ touch 〇〇noMacBook-Pro.local.pid

$ service.start mysql
# ↑再度MySQL起動するも、うまくいかないし作成したファイルが消えてる

$ cd /opt/homebrew/var/mysql
〇〇noMacBook-Pro.local.err #←？errorファイルがある？
```

エラーファイルを確認

```bash
# tailコマンドで末尾2000行を抽出
$ tail -2000 〇〇noMacBook-Pro.local.err
...一部省略
.
.
2023-01-11T09:53:24.585121Z 0 [ERROR] Can't start server : Bind on unix socket: Address already in use
2023-01-11T09:53:24.585130Z 0 [ERROR] Do you already have another mysqld server running on socket: /tmp/mysql.sock ?
2023-01-11T09:53:24.585142Z 0 [ERROR] Aborting
```

怪しい記述発見！
このエラーは、他のMySQLサーバー動いてないですか？というもので、`/tmp/mysql.sock`が存在していることにより起きているエラーでした。

ソケットとはプロセスやネットワーク間の通信機構です。MySQLはこのソケットを通じてサーバーとクライアントが接続されます。

`/tmp/mysql.sock`とは、UNIXドメインソケット（ファイルシステムソケット）というUNIX特有のソケット。ローカルシステム内の通信を行う場合に用いられます。
ソケットは通常、ポート番号を指定し利用するのが一般的ですが、MySQLではこのファイルを使って通信をおこなっているようです。

参考：[https://urashita.com/archives/32590#:~:text=ソケットについてはポート番号,場合に用いられます。](https://urashita.com/archives/32590#:~:text=%E3%82%BD%E3%82%B1%E3%83%83%E3%83%88%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E3%81%AF%E3%83%9D%E3%83%BC%E3%83%88%E7%95%AA%E5%8F%B7,%E5%A0%B4%E5%90%88%E3%81%AB%E7%94%A8%E3%81%84%E3%82%89%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82)

## 第二の沼突破&解決

参考：[https://qiita.com/PoohSunny/items/4df890dde4879c2cd29b](https://qiita.com/PoohSunny/items/4df890dde4879c2cd29b)
```bash
# ファイルを削除
$ sudo rm /tmp/mysql.sock

# MySQL起動→成功！
$ mysql.server start 
Starting MySQL
 SUCCESS!

# MySQLにログイン
$ mysql -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 6
# ちゃんと5.7になってる！
Server version: 5.7.40 Homebrew

Copyright (c) 2000, 2022, 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.
```

無事起動&ログインできました😭
このエラーで丸一日溶けました。。。

## 教訓

- ログを正確に読める者がプログラミングを制す
- Linuxのコマンドを使いこなせないと時間が余計にかかる
- MySQLは~~くそ~~最高