Homebrewで入れたMySQLが起動できないのでアンインストール＆再インストールした話

# 環境
macOS Catalina 10.15.6
MySQL 5.6

# この記事の対象者
- mysqlのデータは飛んでもいいから、きれいにしてやり直したい
- mysqlはバージョン指定してhomerbrewで導入した
- homebrewアップデートしたっぽく、多分それ以来mysqlが起動できない
- 色々な記事の内容試したけど、mysql起動できない
- `… ERROR! server quit updating PID file(/usr/local/var/mysql/watashinoMacBook-pro.local.pid)
`の文字はもう見たくない

# 経緯
### 事の発端
色々お勉強しようと久しぶりにhomebrewで色々インストールしたら、
homebrewがアプデされた模様。

いつものようにrails起動しようとしたらmysql起動してないっすよと怒られたので、
mysql起動させようとしたがエラーが発生。

```
watashinoMacBook-Pro ~ % mysql.server start
Starting MySQL
… ERROR! server quit updating PID file(/usr/local/var/mysql/watashinoMacBook-pro.local.pid)
```
### 再インストール以外の方法を試すものの・・・
色んな記事参考にしながら、エラーログ確認したり、watashinoMacBook-pro.local.pidファイルを作り直したり、キルコマンド試したり、権限いじったりしましたが、
`ERROR! server quit updating PID file(/usr/local/var/mysql/watashinoMacBook-pro.local.pid)`の呪縛から解き放たれることはありませんでした。

データを消さずになんとか解決しようとしましたが、「初期化するとうまくいくっすよ」って記事も見つけてはいたので、悔しいですが初期化することにしました。

### 再インストールするものの・・・
しかし初期化しても`ERROR! server quit updating PID file(/usr/local/var/mysql/watashinoMacBook-pro.local.pid)`の呪縛から解き放たれず、mysqlを起動させることに苦戦し、インストール＆アンインストールを繰り返す日々・・途方に暮れながら、最初の方に漁ってきた記事を見直したら答えが書いていました。（あるあるですね・・・）

**答えが書いていた記事**
[どうしよう！困った時のMac上のMySQLのアンインストール＆再インストール、動作確認手順](https://qiita.com/akiko-pusu/items/aef52b723da2cb5dc596)
# アンインストール＆再インストール方法
## 1. アンインストール
### 1-1. アンインストールの下準備
そもそもバージョン指定して導入していたか確認
パスが/usr/local/opt/以下を指していればバージョン指定して導入していた。・・・はず。

```:バージョン指定して導入していた場合
watashinoMacBook-pro ~ % which mysql
/usr/local/opt/mysql@5.6/bin/mysql
#この例はバージョン5.6
```

```:バージョン指定なしで導入していた場合
watashinoMacBook-pro ~ % which mysql
/usr/local/bin/mysql
```

バージョン指定なしで導入していた場合、下記の記事参考の方がいいかもしれません。
[どうしよう！困った時のMac上のMySQLのアンインストール＆再インストール、動作確認手順](https://qiita.com/akiko-pusu/items/aef52b723da2cb5dc596)

なんでバージョン指定した場合としない場合で参照場所が違うのかってことに対しては説明省きますが、stackoverflowの下記記事が参考になりそうです。（理解がまだ追いついていないので説明ができません・・・）
[Why is there a /usr/local/opt directory created by Homebrew and should I use it?
](https://stackoverflow.com/questions/35337601/why-is-there-a-usr-local-opt-directory-created-by-homebrew-and-should-i-use-it)

### 1-2. my.cnfの場所の確認
設定ファイルのmy.cnfがあるとすればここって場所を調べます。つまり、ない場合もあります。

```
watashinoMacBook-pro ~ % mysql --help | grep my.cnf
                      order of preference, my.cnf, $MYSQL_TCP_PORT,
/etc/my.cnf /etc/mysql/my.cnf /usr/local/etc/my.cnf ~/.my.cnf
```
my.cnfの場所を確認した理由は、後の削除工程でこのファイルも削除したいためです。ちなみに、mysqlを削除してからではこのコマンドで場所を確認できません。
まあ、大体/etc/my.cnf /etc/mysql/my.cnf /usr/local/etc/my.cnf ~/.my.cnfにあるので調べなくても良いかもしれませんが。

ところでmy.cnfって何？って方もいると思いますが、今回は脱線するので設定ファイルという認識程度で良さそうです。

### 1-3. アンインストール
確認したバージョンを指定してmysqlを削除します。

```
watashinoMacBook-Pro ~ % brew uninstall mysql@5.6
```

mysql削除後も関連するファイル・フォルダが生きているので削除します。（uninstallで一緒に消してくれれば良いのに・・・）

```
watashinoMacBook-Pro ~ % sudo rm -rf /usr/local/Cellar/mysql*
watashinoMacBook-Pro ~ % sudo rm -rf /usr/local/bin/mysql*
watashinoMacBook-Pro ~ % sudo rm -rf /usr/local/var/mysql*
watashinoMacBook-Pro ~ % sudo rm -rf /usr/local/share/mysql*
watashinoMacBook-Pro ~ % sudo rm -rf /usr/local/opt/mysql*
watashinoMacBook-Pro ~ % sudo rm -rf /usr/local/etc/my.cnf
watashinoMacBook-Pro ~ % sudo rm -rf /etc/mysql/my.cnf
watashinoMacBook-Pro ~ % sudo rm -rf /etc/my.cnf
watashinoMacBook-Pro ~ % sudo rm -rf ~/.my.cnf
```
## 2. brew doctorでチェック
homebrewを使ったインストールに関する問題をチェックします。
私の場合は、ここで警告を全てクリアにしてから、mysqlをインストールしたら起動する事ができました。
ここで警告出るけど関係ないべって謎の自信がありましたが、大いに関係ありましたね！！これ本当に大事！！
うまくいっていない方、ここで警告出てきませんでしたか？

```:私の場合
watashinoMacBook-Pro ~ % brew doctor
Please note that these warnings are just used to help the Homebrew maintainers
with debugging if you file an issue. If everything you use Homebrew for is
working fine: please don't worry or file an issue; just ignore this. Thanks!

Warning: A newer Command Line Tools release is available.
Update them from Software Update in System Preferences or run:
  softwareupdate --all --install --force

If that doesn't show you an update run:
  sudo rm -rf /Library/Developer/CommandLineTools
  sudo xcode-select --install

Alternatively, manually download them from:
  https://developer.apple.com/download/more/.


Warning: Unbrewed dylibs were found in /usr/local/lib.
If you didn't put them there on purpose they could cause problems when
building Homebrew formulae, and may need to be deleted.

Unexpected dylibs:
  /usr/local/lib/libmecab.2.dylib

Warning: Unbrewed header files were found in /usr/local/include.
If you didn't put them there on purpose they could cause problems when
building Homebrew formulae, and may need to be deleted.

Unexpected header files:
  /usr/local/include/mecab.h

Warning: Unbrewed .la files were found in /usr/local/lib.
If you didn't put them there on purpose they could cause problems when
building Homebrew formulae, and may need to be deleted.

Unexpected .la files:
  /usr/local/lib/libmecab.la

Warning: Unbrewed static libraries were found in /usr/local/lib.
If you didn't put them there on purpose they could cause problems when
building Homebrew formulae, and may need to be deleted.

Unexpected static libraries:
  /usr/local/lib/libmecab.a

Warning: You have unlinked kegs in your Cellar.
Leaving kegs unlinked can lead to build-trouble and cause brews that depend on
those kegs to fail to run properly once built. Run `brew link` on these:
  python@3.8
```

brew doctorで出てくる警告は人によって違うはずなので、
皆さんは簡単に解消できる警告であることを祈ります。。。

ちなみに私の場合は下記のようなコマンドで対応していきます。

```:警告解消
watashinoMacBook-Pro ~ % softwareupdate --all --install --force
watashinoMacBook-Pro ~ % rm -rf /usr/local/lib/libmecab.2.dylib
watashinoMacBook-Pro ~ % brew link python@3.8
```

再チェックし、下記のようになればOKです。

```
watashinoMacBook-Pro ~ % brew doctor         
Your system is ready to brew.
```

## 3. 再インストール
導入したいバージョンを指定してインストールします。

```
watashinoMacBook-Pro ~ % brew install mysql@5.6
Updating Homebrew...
==> Downloading https://homebrew.bintray.com/bottles/mysql%405.6-5.6.47.catalina.bottle.tar.gz
Already downloaded: /Users/watashi/Library/Caches/Homebrew/downloads/c270819d76ed326059143e1b4c6c6c0ab672e4259c328c140ec71d917babc348--mysql@5.6-5.6.47.catalina.bottle.tar.gz
==> Pouring mysql@5.6-5.6.47.catalina.bottle.tar.gz
==> /usr/local/Cellar/mysql@5.6/5.6.47/bin/mysql_install_db --verbose --user=watashi --basedir=/usr/local/Cellar/mysql@5.6/5.6.47 --datadir=/usr/local/var/mysql --tmpdir=/tmp
==> Caveats
A "/etc/my.cnf" from another install may interfere with a Homebrew-built
server starting up correctly.

MySQL is configured to only allow connections from localhost by default

To connect:
    mysql -uroot

mysql@5.6 is keg-only, which means it was not symlinked into /usr/local,
because this is an alternate version of another formula.

If you need to have mysql@5.6 first in your PATH run:
  echo 'export PATH="/usr/local/opt/mysql@5.6/bin:$PATH"' >> ~/.zshrc

For compilers to find mysql@5.6 you may need to set:
  export LDFLAGS="-L/usr/local/opt/mysql@5.6/lib"
  export CPPFLAGS="-I/usr/local/opt/mysql@5.6/include"


To start mysql@5.6:
  brew services start mysql@5.6
Or, if you don't want/need a background service you can just run:
  /usr/local/opt/mysql@5.6/bin/mysql.server start
==> Summary
🍺  /usr/local/Cellar/mysql@5.6/5.6.47: 344 files, 155.2MB
```
`Already downloaded:`ってmysql関連のフォルダ・ファイル全部消えてなかったんじゃないの？って思われるかもしれませんが、zipファイルみたいなものなので、事前に消さなくても大丈夫だと思います。
不安なら`/Users/watashi/Library/Caches/Homebrew/downloads/`以下のmysqlっぽいgzファイルを削除しておきましょう。（と言いつつ、私も不安だったので一度削除しています・・）

mysql起動を失敗しまくった経験則ですが、起動に失敗する場合は色んな記事で見かける以下の文言が出てこなかった気がします。

```
==> /usr/local/Cellar/mysql@5.6/5.6.47/bin/mysql_install_db --verbose --user=watashi --basedir=/usr/local/Cellar/mysql@5.6/5.6.47 --datadir=/usr/local/var/mysql --tmpdir=/tmp`
```

パスを通します。（どこからでも起動できるようにします。）

```
watashinoMacBook-Pro ~ % echo 'export PATH="/usr/local/opt/mysql@5.6/bin:$PATH"' >> ~/.zshrc
watashinoMacBook-Pro ~ % source ~/.zshrc
```

ちなみに、「パスを通す」については、下記記事がわかりやすいです。
[PATHを通すとは？ (Mac OS X)](https://qiita.com/soarflat/items/09be6ab9cd91d366bf71)
[PATHを通すために環境変数の設定を理解する (Mac OS X)](https://qiita.com/soarflat/items/d5015bec37f8a8254380)


念のため、mysqlが入ったか確認のため、mysqlのコマンドを確認します。下記のようになれば、OKです。

```
watashinoMacBook-Pro ~ % which mysql
/usr/local/opt/mysql@5.6/bin/mysql
```

## 4. mysql起動
ドキドキしながら起動しましょう。。。

```
watashinoMacBook-Pro ~ % mysql.server start
Starting MySQL
. SUCCESS! 
```
うまくいった方、おめでとうございます！！
うまくいかなかった方、私の力不足です。。。

# じゃあ、どうすればこの問題は起きなかったの？（推測）
今回は（おそらく）brew updateされてからmysqlが起動できなくなりましたが、処置としてまっさらにして再インストールしました。
brew経由で何かを入れる・brewをアップデートする前に、`mysql.server stop`でmysqlを停止させていれば本案件は起きなかったのかなーと思っています。

今後はmysqlを停止→brewで何かを入れる→mysqlを起動を徹底しようと思います。（推測が当たってて欲しい・・・）

# 最後に
- 胃に穴が開くかと思ったくらいハマったので、備忘録としても残したく、冗長だなあ・余分な補足だなあと感じられる箇所もありますが、多めに見ていただければと思います。。。
- 間違っている点・補足があれば、ご指摘いただけると幸いです。