アプリ製作中に環境設定したMySQLの接続が切れていた

##Railsでアプリ起動しようとしたらできなくなってた
**[開発環境]**
Mac OS Catalina 10.15.5

##Mysql2::Error Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
`$ rails server`は起動する
web画面上では↓
``Mysql2::Error
Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)``
このソケット経由でローカルMySQLには接続できませんと言われました。


ターミナルでいろいろ試してみる↓

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

$ ps ax | grep mysqld
11426 s000  S+     0:00.00 grep mysqld

$ mysql_config --socket
/tmp/mysql.sock
$ 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

$ sudo mysql.server restart
Password:
 ERROR! MySQL server PID file could not be found!
Starting MySQL
. ERROR! The server quit without updating PID file (/usr/local/var/mysql/XXXnoMacBook-Air.local.pid).
$ mysql.server start
Starting MySQL
./usr/local/Cellar/mysql@5.7/5.7.29/bin/mysqld_safe: line 144: /var/log/mysqld.log: Permission denied
/usr/local/Cellar/mysql@5.7/5.7.29/bin/mysqld_safe: line 144: /var/log/mysqld.log: Permission denied
/usr/local/Cellar/mysql@5.7/5.7.29/bin/mysqld_safe: line 198: /var/log/mysqld.log: Permission denied
/usr/local/Cellar/mysql@5.7/5.7.29/bin/mysqld_safe: line 144: /var/log/mysqld.log: Permission denied
 ERROR! The server quit without updating PID file (/usr/local/var/mysql/XXXnoMacBook-Air.local.pid).
```
-----
**上記で実施したコマンド**
**コマンド内容 → 結果**

`$ mysql -u root -p`
mysqlにログイン → 失敗
`$ ps ax | grep mysqld`
起動確認 → 起動していない
`$ mysql_config --socket`
socketの位置確認 → 合ってる
`$ mysql --help | grep my.cnf`
設定ファイルの位置確認 → 合ってる
`$ sudo mysql.server restart / start`
mysql再起動 / 起動 → 失敗

-----

```
# MySQLで設定されているSocketのパスを確認
$ mysql_config --socket 
/tmp/mysql.sock

# /tmp/mysql.sockが存在するか確認
$ ls -la /tmp/mysql.sock  
ls: /tmp/mysql.sock: No such file or directory

# なかったので作成
$ sudo touch /tmp/mysql.sock
$ mysql -u root -p
Enter password: 
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (38)
```
`ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)`
の原因は**/tmp/mysql.sockのファイルが消えていた。**

ファイルを作成すると表示されるエラーが変わった。
この辺のエラーはよくあるみたいだけど、人によって原因は異なってくる。
`ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (38)`
に変わると次はファイルの入っている**ディレクトリの権限の問題**らしい。

```
# 権限を正しく直す
$sudo chown -R _mysql:_mysql /usr/local/var/mysql
Password: #ここにpcのパスワードを入力

$ sudo mysql.server start
Starting MySQL
. SUCCESS! 
```
きたあああああ！！
最初はアプリ開発の環境設定の時点でMySQLに１週間くらい費やしたから早期解決できてめちゃくちゃ嬉しい。

##学んだこと(随時更新)
###MySQL 5.7では、インストール直後のrootユーザは管理者権限でないとログインできない。`sudo`が必要となる。

`$ sudo mysql -u root -p`
本番サーバでは一般ユーザが DB の root にアクセスできるのは好ましくない。
root はサーバ管理者のみが扱うことにして、別途 DB 操作用のユーザ (devuser 等) を作成するのが良い。

ただし、開発 PC 上では、ローカルでの使用を前提として、root 接続するよう環境を設定してあることもある。既存のプロジェクトがたくさんあったりすると、いちいち新しいユーザで接続するようにパラメータを変えるのも面倒なので、一般ユーザのまま root で接続できると便利。


考えてみれば、`$ mysql`でroot接続できないなーと思っていた。↓
(ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO))
Homebrew経由でインストールしていれば以下のコマンドが使える
`$ brew services list`・・・起動状況が確認できる
`$ brew info mysql`・・・versionなどが確認できる

[MySQL 5.7 で sudo 無し root ログイン [Ubuntu]](https://note.com/junf/n/na40fbca9e6ea)
https://github.com/Homebrew/homebrew-services


##参考
[mysqlのsocketエラーでrailsアプリが起動できない](https://qiita.com/fujitora/items/d341c52706d1954cae28)
[【MySQL】Mysql2::Error::ConnectionError 対処法](https://qiita.com/aiandrox/items/22d532fe5942e4adab5a)
[MySQLの起動、停止ができない場合の対処法](https://beyondjapan.com/blog/2016/03/mysql-stop-start-issues/)
[mysqlが起動できない（Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)）](https://qiita.com/carotene4035/items/e00076fe3990b9178cc0)

[よく使うMySQLコマンド集](https://qiita.com/CyberMergina/items/f889519e6be19c46f5f4)