MacでMysqlが起動できなかったときの顛末


## ことの発端

脱初心者しよう。スキルアップするには自分でサービスを立ち上げてみることが一番だろう。
そう思いRailsアプリを作ろうとMysqlをmacで動かそうとしたら見事にハマったのでメモ。
なおこの記事は回り道が多く有益ではないので「こんな風に対応したのか」だけ見て頂ければ。

## 環境

MacOS Catalina 10.15.7

```
$ sw_vers
ProductName:	Mac OS X
ProductVersion:	10.15.7
BuildVersion:	19H114
```

## この記事で出てくるエラーのまとめ

あくまで自分の環境の場合です。

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

* mysqlが起動してなかった

### . ERROR! The server quit without updating PID file

* PIDファイルが無かった
* PIDファイルの権限が違った
* ホスト名が明示的に設定されてなかった

### mysqld_safe A mysqld process already exists

* Homebrewでmysql入れ直した際に作られたmysqlのplistの設定で止まらないようになってた


## 作業の経緯

mysqlの動作確認をしようとするとエラー。

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

psの結果を見てもプロセスは立ち上がっていない。

```
$ ps -ef | grep mysql
  501 70946  3833   0  8:39PM ttys000    0:00.00 grep mysql
```

sudo mysql.server start で起動させようとするとまた違うエラー。


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

そもそもpidファイルが存在していない？
・・・というか、コンピュータ名の次にあるホスト名みたいなの、なに・・・？
調べてみたところ以下の記事を発見。

[MacでPIDファイルによるエラーでmysqlを起動できない時の対処法 (ERROR! MySQL server PID file could not be found!)](https://rooter.jp/infra-ops/mysql-pid-host/)

「Macの場合ですが、ホスト名が明示的に設定されていない場合、ネットワークが変わるとホスト名も変わってしまう」
ということなので設定を確認。

```
$ sudo scutil --get ComputerName
sugeta10
$ sudo scutil --get LocalHostName
sugeta10
$ sudo scutil --get HostName
HostName: not set
```

設定できるようなので試してみます。

```
$ sudo scutil --set HostName sugeta10
$ sudo scutil --get HostName
sugeta10
```

そもそもこれらの設定はなんなのだろうと調べてみたところ、以下の記事を発見
参照：[MacOS の ComputerName/LocalHostName/HostName 備忘録](https://www.labohyt.net/blog/apple/post-1704/)
ざっくりまとめるとこのような感じのようです。

* ComputerName：システム環境設定 → 共有 → コンピュータ名から参照できる名前
* LocalHostName：MacのBonjourで使用する名前 (ComputerNameと実質同じ)
* HostName：ターミナルから問い合わせた場合の名前

さて、これで起動するかと思いきや叶わず。ファイルがないよと。

```
$ sudo mysql.server start
Starting MySQL
. ERROR! The server quit without updating PID file (/usr/local/var/mysql/sugeta10.pid).
$ ls /usr/local/var/mysql/sugeta10.pid
ls: /usr/local/var/mysql/sugeta10.pid: No such file or directory
```

ファイルを作ろうとしてパーミッションエラーになったので、sudo付けて再実行。権限も修正。

```
$ touch /usr/local/var/mysql/sugeta10.pid
touch: /usr/local/var/mysql/sugeta10.pid: Permission denied
$ sudo touch /usr/local/var/mysql/sugeta10.pid
$ sudo chown _mysql:_mysql /usr/local/var/mysql/sugeta10.pid
```

でもダメ・・・！

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

各所見て回って「mysql入れ直すしかねぇ」という話が多かったので以下を参考に。

[The server quit without updating PID file　mysqlエラー解決方法]
(https://qiita.com/kazu_wsx/items/bb787e9e4e919da03705)

```
$ 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 install mysql@5.6
$ echo 'export PATH="/usr/local/opt/mysql@5.6/bin:$PATH"' >> ~/.bash_profile
$ source ~/.bash_profile
$ mysql.server start
```

いけたか？
起動してみたら、「SUCCESS!」と言いつつ変なメッセージが渡されている。。。

```
$ mysql.server start
Starting MySQL
 SUCCESS!
$ 210214 11:26:15 mysqld_safe A mysqld process already exists
```

何度停止しても停止できない・・・

```
$ mysql.server stop
Shutting down MySQL
.. SUCCESS!
$ mysql.server stop
Shutting down MySQL
.. SUCCESS!
```

startしたときに何故か渡されている文字で調べてみると以下記事を発見。

* [Mac Homebrewで入れたMySQLがstopしても、自動で起動し復活するゾンビモードを解消](https://mozy-ok.hatenablog.com/entry/2018/04/10/160331)
* [Homebrewで入れたMySQL5.1を停止できない件の対策](https://kasei-san.hatenadiary.org/entry/20130105/p1)

藁にもすがる思いで上記参考に以下を実施。

```
$ vi ~/Library/LaunchAgents/homebrew.mxcl.mysql@5.6.plist
```

変更前

```
<dict>
    <key>KeepAlive</key>
    <true/>
```

変更後

```
<dict>
    <key>KeepAlive</key>
    <false/>
```

設定変更を反映

```
$ launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.mysql@5.6.plist
$ launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.mysql@5.6.plist
```

起動できた・・・！😂

```
$ mysql -u root
```