なぜ記事を書こうと思ったか
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 の設定
最後に
何か間違っている所や気になった事があれば、コメントいただけると嬉しいです。