Can't connect to local Mysql server through socket '/tmp/mysql.sock'(2)

# エラー
ActiveRecord::ConnectionNotEstablished
Can't connect to local Mysql server through socket '/tmp/mysql.sock'(2)

これは、MySQL サーバーデーモン (Unix) またはサービス (Windows) が起動していないことを示しています。
### 出典
https://dev.mysql.com/doc/refman/8.0/ja/connecting-disconnecting.html#:~:text=ERROR%202002%20(HY000)%3A%20Can%27t%20connect%20to%20local%20MySQL%20server%20through%20socket%20%27/tmp/mysql.sock%27%20(2)%E3%80%82%E3%81%93%E3%82%8C%E3%81%AF%E3%80%81MySQL%20%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%83%87%E3%83%BC%E3%83%A2%E3%83%B3%20(Unix)%20%E3%81%BE%E3%81%9F%E3%81%AF%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%20(Windows)%20%E3%81%8C%E8%B5%B7%E5%8B%95%E3%81%97%E3%81%A6%E3%81%84%E3%81%AA%E3%81%84%E3%81%93%E3%81%A8%E3%82%92%E7%A4%BA%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82
### 気づき
どうやらsockファイルを介してmysqlサーバーへ接続できていないらしい。
この問題のsockファルを指定のパスまでいき確認してみる。
すると
lsで確認してみるとtmp/mysql.sockが存在していなかった。
これが無いからエラーだと思う。
このファイルがどういう意味をなすのか調べてみる必要がある。

# tmp/mysql.sockとは？
サーバーがローカルクライアントと通信するために使用する UNIX ソケットファイルのデフォルトの場所は、/tmp/mysql.sock です。

### 出典
https://dev.mysql.com/doc/refman/8.0/ja/problems-with-mysql-sock.html#:~:text=%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%81%8C%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88%E3%81%A8%E9%80%9A%E4%BF%A1%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AB%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B%20UNIX%20%E3%82%BD%E3%82%B1%E3%83%83%E3%83%88%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E3%83%87%E3%83%95%E3%82%A9%E3%83%AB%E3%83%88%E3%81%AE%E5%A0%B4%E6%89%80%E3%81%AF%E3%80%81/tmp/mysql.sock%20%E3%81%A7%E3%81%99%E3%80%82

# 気づき
ファイルを作成して書かなければならないと思う。
しかしどう書くのか？
もしくは何かをインストールするのか？
どうにかして接続させなければならない。

# どのようなことをすればこのエラーは解決するのか？

https://search.oracle.com/mysql?q=%2Ftmp%2Fmysql.sock&size=10&page=1&tab=all&app=mysql&langs=japanese

接続しなければならないので”サーバへの接続、サーバからの切断をクリックしてみた。

https://dev.mysql.com/doc/refman/8.0/ja/connecting-disconnecting.html#:~:text=ERROR%202002%20(HY000)%3A%20Can%27t%20connect%20to%20local%20MySQL%20server%20through%20socket%20%27/tmp/mysql.sock%27%20(2)%E3%80%82%E3%81%93%E3%82%8C%E3%81%AF%E3%80%81MySQL%20%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%83%87%E3%83%BC%E3%83%A2%E3%83%B3%20(Unix)%20%E3%81%BE%E3%81%9F%E3%81%AF%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%20(Windows)%20%E3%81%8C%E8%B5%B7%E5%8B%95%E3%81%97%E3%81%A6%E3%81%84%E3%81%AA%E3%81%84%E3%81%93%E3%81%A8%E3%82%92%E7%A4%BA%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82

が見つかった。

# MySQL サーバーデーモンとは？
デーモン (サーバー とも呼ばれる) とは、常にバックグラウンドで実行され、他のプロセスが必要とする機能を実行するプロセスのことです。
### 出典
https://www.ibm.com/docs/ja/aix/7.1?topic=protocol-tcpip-daemons#:~:text=%E3%83%87%E3%83%BC%E3%83%A2%E3%83%B3%20(%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%20%E3%81%A8%E3%82%82%E5%91%BC%E3%81%B0%E3%82%8C%E3%82%8B)%20%E3%81%A8%E3%81%AF%E3%80%81%E5%B8%B8%E3%81%AB%E3%83%90%E3%83%83%E3%82%AF%E3%82%B0%E3%83%A9%E3%82%A6%E3%83%B3%E3%83%89%E3%81%A7%E5%AE%9F%E8%A1%8C%E3%81%95%E3%82%8C%E3%80%81%E4%BB%96%E3%81%AE%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E3%81%8C%E5%BF%85%E8%A6%81%E3%81%A8%E3%81%99%E3%82%8B%E6%A9%9F%E8%83%BD%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E3%81%AE%E3%81%93%E3%81%A8%E3%81%A7%E3%81%99%E3%80%82

メモリ上で「さぁ、いつでもかかってこい」と待機している常駐プログラムのUNIX系OSにおける呼び名
### 出典
https://wa3.i-3-i.info/word11000.html#:~:text=%E3%83%A1%E3%83%A2%E3%83%AA%E4%B8%8A%E3%81%A7%E3%80%8C%E3%81%95%E3%81%81%E3%80%81%E3%81%84%E3%81%A4%E3%81%A7%E3%82%82%E3%81%8B%E3%81%8B%E3%81%A3%E3%81%A6%E3%81%93%E3%81%84%E3%80%8D%E3%81%A8%E5%BE%85%E6%A9%9F%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E5%B8%B8%E9%A7%90%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%81%AEUNIX%E7%B3%BBOS%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E5%91%BC%E3%81%B3%E5%90%8D

MySQLとしてのお仕事をしているデーモンさん が「mysqld」です
...
データを入れておく箱とそれを管理している代理プログラムを一緒くたにしたものが「データベースマネジメントシステム」です。
...
そして、MySQLというデータベースマネジメントシステムにおいて、データを入れておく箱を管理している代理プログラムがmysqldです。
### 出典
https://wa3.i-3-i.info/word13578.html

### 気づき
どうやらmysqlが動いていないらしい。

# MySQL サーバーデーモン (Unix)を起動させる
systemctl start mysqld 
起動させたが失敗

https://qiita.com/miriwo/items/ffe5cdbd7bbe0333259b

上の記事によると
mysql.server start大体同じらしいがsystemctlで大丈夫らしい。

sudo systemctl start mysqld
で強制的に起動させた。
しかし失敗した。

# 気づき
他に原因がありそうだ。
エラーコードで調べてみた。

/tmp/mysql.sockを
/var/lib/mysql/mysql.sock
に変更するらしい。
また
config/database.ymlも関係しているらしい。

### 出典
https://qiita.com/tkmd35/items/c26d1dffca4be0a4f017

# config/database.ymlとは？
ActiveRecord経由でデータベースに接続するには、まずconfig/database.ymlに対して接続設定を定義する必要があります。
### 出典
https://gihyo.jp/book/2022/978-4-297-13062-6

### 気づき
データベースに接続するにはこのファイルが必要だったのか。
どうやらソケットがおかしいらしい。

# /var/lib/mysql/mysql.sockとは？

Unix では、Unix ソケットファイル（たとえば、/var/run/mysqld/mysqld.sock）または TCP/IP（たとえば、127.0.0.1:3306）の 2 つの異なる方法を使用して mysqld サーバーに接続できます。Unix ソケットファイルで作成された接続は TCP/IP よりも高速ですが、同じコンピューター上のサーバーに接続する場合にのみ使用できます。Unix ソケットファイルを使用する場合、接続文字列のホスト名とポートをスキップできます。
### 出典
https://pleiades.io/help/datagrip/how-to-connect-to-mysql-with-unix-sockets.html?keymap=windows#:~:text=Unix%20%E3%81%A7%E3%81%AF%E3%80%81Unix%20%E3%82%BD%E3%82%B1%E3%83%83%E3%83%88%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%EF%BC%88%E3%81%9F%E3%81%A8%E3%81%88%E3%81%B0%E3%80%81/var/run/mysqld/mysqld.sock%EF%BC%89%E3%81%BE%E3%81%9F%E3%81%AF%20TCP/IP%EF%BC%88%E3%81%9F%E3%81%A8%E3%81%88%E3%81%B0%E3%80%81127.0.0.1%3A3306%EF%BC%89%E3%81%AE%202%20%E3%81%A4%E3%81%AE%E7%95%B0%E3%81%AA%E3%82%8B%E6%96%B9%E6%B3%95%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%20mysqld%20%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%81%AB%E6%8E%A5%E7%B6%9A%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82Unix%20%E3%82%BD%E3%82%B1%E3%83%83%E3%83%88%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%A7%E4%BD%9C%E6%88%90%E3%81%95%E3%82%8C%E3%81%9F%E6%8E%A5%E7%B6%9A%E3%81%AF%20TCP/IP%20%E3%82%88%E3%82%8A%E3%82%82%E9%AB%98%E9%80%9F%E3%81%A7%E3%81%99%E3%81%8C%E3%80%81%E5%90%8C%E3%81%98%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%83%BC%E4%B8%8A%E3%81%AE%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%81%AB%E6%8E%A5%E7%B6%9A%E3%81%99%E3%82%8B%E5%A0%B4%E5%90%88%E3%81%AB%E3%81%AE%E3%81%BF%E4%BD%BF%E7%94%A8%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82Unix%20%E3%82%BD%E3%82%B1%E3%83%83%E3%83%88%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B%E5%A0%B4%E5%90%88%E3%80%81%E6%8E%A5%E7%B6%9A%E6%96%87%E5%AD%97%E5%88%97%E3%81%AE%E3%83%9B%E3%82%B9%E3%83%88%E5%90%8D%E3%81%A8%E3%83%9D%E3%83%BC%E3%83%88%E3%82%92%E3%82%B9%E3%82%AD%E3%83%83%E3%83%97%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82

Unix ドメインソケットのデフォルトの場所は/var/lib/mysql/mysql.sock
### 出典
https://dev.mysql.com/doc/refman/8.0/ja/selinux-file-context.html#:~:text=Unix%20%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E3%82%BD%E3%82%B1%E3%83%83%E3%83%88%E3%81%AE%E3%83%87%E3%83%95%E3%82%A9%E3%83%AB%E3%83%88%E3%81%AE%E5%A0%B4%E6%89%80%E3%81%AF/var/lib/mysql/mysql.sock

### 気づき
* 同じコンピュータ内でmysqld サーバーに接続するためにsocketを使うのか。
* デフォルトでこの場所にあるからそこを指定しなければならない。
だからこれを介せば接続できるのではないか？

# 結果
エラーが治った。
新たなエラーが出た。