0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

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

Last updated at Posted at 2022-06-05

なぜ記事を書こうと思ったか

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 の設定

最後に

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

参考記事

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?