DockerでRuby on Railsの環境を構築する際のmysql.cnfのコマンド及びコード理解

## なぜ記事を書こうと思ったか
  mysql 用の設定ファイルを作成する際にコマンド及びコードの理解を備忘録として残すため。

## entrypoint.shのコマンド説明
mysql.cnf
```
[mysqld]
default_authentication_plugin = mysql_native_password
skip-host-cache
skip-name-resolve

character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init-connect = SET NAMES utf8mb4
skip-character-set-client-handshake

[client]
default-character-set = utf8mb4

[mysqldump]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4
```

  以下にコマンド及びコードの解説を致します。
- `[mysqld]`

　MySQL サーバーとも呼ばれ、データベースおよびテーブルを含む MySQL データディレクトリへのアクセスを管理します。

- `default_authentication_plugin = mysql_native_password`

  Mysqlに接続する際のユーザー認証を行う認証プラグインを設定している。今回の場合は`mysql_native_password`を認証プラグインとしている。
  Mysqlではこれまでデフォルトとして、`mysql_native_password`が設定されていたが、Mysql8.04以降から`caching_sha2_password`がデフォルトとなっている。
  `caching_sha2_password`では、暗号化の方法としてSHA-256を採用しており、`mysql_native_password`より安全なパスワードの暗号化をする事ができ、キャッシュ
  処理で、同一ユーザーの高速処理を可能としている。
  なぜ、今回`caching_sha2_password`を設定していないかと言うと、サーバー側とクライアント側で`caching_sha2_password`を設定していないとエラーを起こしてしまい、クライアント側でも`caching_sha2_password`に対応できない可能性もあるため、現状は、`mysql_native_password`が主流となっているため。

- `skip-host-cache`

  DNSのキャッシュ戦略機能をオフにする。
  docker-composeでコンテナを立てる場合、dockerがprivate ipを当ててくれる為、dnsで名前解決する必要はない。

- `skip-name-resolve`

　`skip-host-name`と同様、DNSの名前解決の設定をオフにする。

- `character-set-server = utf8mb4`

　サーバー側でsql文を発行する際の文字コードの設定。
　mysqlのutf8は1-3byte文字しか扱えない。
　utf8mb4であれば、日本語や中国語、Androidの文字などの文字列を格納できるようになる。

- `collation-server = utf8mb4_unicode_ci`

　文字コードの照合を設定する。
　設定値としては、以下がある。
　1. utf8mb4_general_ci　　　：大文字・小文字 区別しない、絵文字 区別しない、濁点・半濁点 区別する
　2. utf8mb4_unicode_ci　　　：大文字・小文字 区別しない、絵文字 区別しない、濁点・半濁点 区別しない
　3. utf8mb4_unicode_520_ci ：大文字・小文字 区別しない、絵文字 区別する　、濁点・半濁点 区別しない
　4. utf8mb4_bin　　　　　　　 :大文字・小文字 区別する　、絵文字 区別する　、濁点・半濁点 区別する

- `init-connect = SET NAMES utf8mb4`

　接続する各クライアントに対してサーバーによって実行される文字列を設定できる。
　今回では、クライアントからサーバーへの SQL ステートメントの送信に使用される文字セットはutfmb4で設定している。

- `skip-character-set-client-handshake`

　設定すると以下の3つを強制的にcharacter_set_serverの内容(utfmb4)に変更する。
　character_set_connection：クエリを実行する文字コード
　character_set_client　　 ：クライアントが送ってくるとサーバーが想定している文字コード
　character_set_result　　 ：クライアントに結果を返すときの文字コード

- [client]

　mysqlクライアントツールへの設定

- `default-character-set = utf8mb4`

　デフォルトの文字コードとしてutf8mb4を設定。

- [mysqldump]

　バックアップコマンドへの設定

- [mysql]

　MySQL のコマンドラインツールである mysql.exe の設定

## 最後に
  何か間違っている所や気になった事があれば、コメントいただけると嬉しいです。

## 参考記事
- [Nginx+Rails6.0+MySQL8.0+Adminer：docker-compose で rails new | Zenn | 北山淳也](https://zenn.dev/junki555/articles/13da16e4f10c9dee2bb9)

- [MySQL8.0新機能 (caching_sha2_password 認証プラグイン)](https://blog.s-style.co.jp/2018/05/1807/)

- [dockerでmysqlコンテナを立てる時の設定 my.cnf](https://qiita.com/ShuzoN/items/c2aabdf0245651704883)

- [mysqlで文字コードをutf8にセットする](https://qiita.com/YusukeHigaki/items/2cab311d2a559a543e3a)

- [4.3.1 mysqld — MySQL サーバー](https://dev.mysql.com/doc/refman/5.6/ja/mysqld.html)

- [10.1.5 アプリケーションの文字セットおよび照合順序の構成](https://dev.mysql.com/doc/refman/5.6/ja/charset-applications.html)

- [MySQLの文字コードとCollation](https://qiita.com/tfunato/items/e48ad0a37b8244a788f6)

- [5.1.8 サーバーシステム変数](https://dev.mysql.com/doc/refman/8.0/ja/server-system-variables.html)

- [MySQLで文字コードに苦戦している人向けのメモ](https://qiita.com/yoshi-taka/items/ceb5d14684b93715f1a6)

- [基礎MySQL ~その２~ my.cnf (設定ファイル)](https://qiita.com/yoheiW@github/items/bcbcd11e89bfc7d7f3ff)

- [my.iniファイルの記述方法](https://www.dbonline.jp/mysql/myini/index2.html)