mysqlとの死闘（備忘録）

# ※注意
これから先に書かれていることは私がmysqlのエラーと闘った時の備忘録であり、色々なことを試した中の覚えていることを抜粋して記録している為中には誤った情報が含まれている可能性があります。
最終的に解決するという結論にはなりますが、ここに記載したことをそのまま真似すると

**mysqlに保存された大切なデータを全て失うことになります。**

ので本当に困った時の最後の手段として参考にしてください。



# 終わりの始まり
2020年4月29日MacのOSをcatalionaにアップデートしようと思ったことから悲劇が始まった。
railsを使って作成したアプリケーションを覗こうと思いいつものようにターミナルに　rails s　を入力すると、見慣れないエラーがずらり

```:エラー文（一部）
Errno::EACCES: Permission denied @ rb_sysopen - /Users/xxxx/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/mysql2-0.5.3/CHANGELOG.md
An error occurred while installing mysql2 (0.5.3), and Bundler cannot continue.
Make sure that `gem install mysql2 -v '0.5.3' --source 'https://rubygems.org/'` succeeds before bundling.
```
gem install mysql2 -v '0.5.3'　⬅️この部分をやればいいんでしょ？と思い　bundle install をすると、

```:エラー文（これも一部）
ERROR:  While executing gem ... (Errno::EACCES)
Permission denied @ rb_sysopen - /Users/xxxx/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/mysql2-0.5.3/CHANGELOG.md
```
となる。
・・・あれ？
暫くは何が起きているかが分からずエラー文を読みながら１つ１つエラーを潰していく。
そうこうしていくうちにようやく原因がOSのアップデートにあるのでは？ということに気付く（遅すぎる！！）
という訳で改めてCatalina向けの環境構築を始める・・・
ここまでは大した問題ではなかった。

# 不機嫌なmysql
Catalina仕様の設定を順調に進めるが、mysqlを起動させようとした時に事件が発生！！

```
% mysql.server status
  ↓
 ERROR! MySQL is not running
```
何故？


嫌な予感がしてsequel pro を覗くと、

```
ソケット経由で接続できなかったか、リクエストがタイムアウトしました。
ソケットのパスが正しく必要な権限のあること、あわせてサーバが起動していることを確認してください。
```
ソケットって何？（素人）
その他にも

```
/usr/local/var/mysql/xxxxxx.err: Permission denied　※アクセス拒否
```
とか

```
ERROR! The server quit without updating PID file 　(/usr/local/var/mysql/XXXXXXXX.local.pid)　※PIDファイルが更新されずにサーバーが終了
```
さらには

```
ERROR! MySQL server PID file could not be found! ※ファイルが無いよ！！
```
そして、

```
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
```
ソケット？さっきも見たような？？

などと兎にも角にもご機嫌斜めな私のmysqlサン、不機嫌にも程がある。


その後はネット上の情報を探してみるも原因、解決法が様々で特に混乱させるのは

```
/usr/local/var/mysql/xxxxxxxx.err: Permission denied
```
となっていた部分
パーミッション？・・・アクセス権限のことのようで（違う？）
/usr/local/var/mysql　に対して権限を一方ではユーザー名にするとか、もう一方ではmysqlにするとかで滅茶苦茶な状態になってしまいました（涙）

そしてついに禁断のアンインストールという暴挙に出る私。
再インストールし直してsequel proにアクセスするも撃沈・・・
万事休す（ある意味ではもう終わっている）


# ついに解決！！
色々と調べていく中で、mysqlが動かなくなる原因として
複数のバージョンが入っている可能性がある。
何らかの原因でPIDファイルやsockファイルが無くなってしまった。
ファイルのアクセス権限が変わってしまった。
などの可能性があるらしいということが判明したので兎に角落ち着いて１つ１つ潰すことにした。

### 重複解除
brew listで mysql@5.6と mysql@5.7が存在していることが判明→　mysql@5.7アンインストール
ps aux |grep mysql と入力し、mysqlのプロセスをkill
ps aux |grep mysqld と入力し、msqqldのプロセスをkill
mysql.server start →　失敗
### ファイル作成

```:エラー
Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
```
sockファイルをつくります。

```
% touch /tmp/mysql.sock 
```

```:エラー
ERROR! MySQL server PID file could not be found!
```
PIDファイルをつくります。

```
% touch /usr/local/var/mysql/XXXXXXXX.local.pid
```
mysql.server start →　失敗・・・う〜ん
### パーミッション
```
% sudo chmod -R ユーザー名 /usr/local/var/mysql/
``` 
これでもダメ

### 再びアンインストールからのインストール
/user/local/var/mysql を削除

```
% sudo rm -rf /usr/local/var/mysql
```
mysqlをアンインストール

```
% brew uninstall mysql@5.6
```
すぐさま再インストール

```
% brew install mysql@5.6
```

### そして、今日のその時
お願い！！

```
 % mysql.server start
```
からの

```
Starting MySQL
 SUCCESS! 
```
やったぁぁぁ〜！！！

# 終わりに
結局色々なことを試しすぎて、そもそもの原因とそれに対する解決策は判明させることができませんでした。（雑魚です、スミマセン）
仕組みが分からず割と早い段階でアンインストールという暴挙に出てしまった為にmysqlの接続と引き換えに大切なデータを失うこととなりました。
間違えたことを書いている可能性もありますが、もしかしたら同じ境遇にあった人にとって何かのヒントになるかも知れないと思い記録を残しました。
これ以上私のような思いをする方が現れないことを願います。