#
ドキュメント

Document

自分のための備忘録です。

設定ファイル

概要

おもにサーバシステム変数を指定します。

  • MySQLの設定ファイルは my.cnf です(※ ホームディレクトリに作成する場合は .my.cnf
  • MySQLは(存在すれば)複数の my.cnf を読み込みます
  • あとから読み込んだ my.cnf の値が常に優先されます

パス

設定ファイルのパスは以下コマンドで確認できます。

$ 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 

読み込み順序

my.cnf はあとから読み込まれた値が優先されます。

// 読み込み順序を確認
$ 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 

上記の読み込み順は以下のとおりです。

  1. /etc/my.cnf
  2. /etc/mysql/my.cnf
  3. /usr/local/etc/my.cnf
  4. ~/.my.cnf

上記は例で OS によっても異なります。

タイムゾーン

タイムゾーンを設定

// my.cnf
[mysqld]
// ...
default_time_zone = 'Asia/Tokyo'
// ...

タイムゾーンを確認

mysql > show variables like '%time_zone%';

JSTは日本時間

+------------------+--------+
| Variable_name    | Value  |
+------------------+--------+
| system_time_zone | UTC    |
| time_zone        | Asia/Tokyo |
+------------------+--------+

文字セット

ref.

文字コードおよび照合順序を設定

文字セットおよび照合順序( Collation )を設定する例です。 例として文字コードに utf8mb4 を設定します。

# my.cnf
[mysqld]
# 必須
character_set_server=utf8mb4
collation_server=utf8mb4_bin
# 以下は念のため設定
character_set_client=utf8mb4
character_set_connection=utf8mb4
character_set_database=utf8mb4
character_set_results=utf8mb4

[client]
default_character_set=utf8mb4

※ MySQL 8 系の character_set_client、character_set_connection、character_set_database、character_set_results はデフォルトで utf8mb4 です。 ※ mysql コマンドでオプションを指定するときは character_set_server は character-set-server とハイフンになる(逆に言うと my.cnf で指定する場合は character_set_server とアンダースコアを使用します)。

上記 my.cnf の character 関連の設定値を確認します。

mysql> show variables like '%char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8mb4                    |
| character_set_connection | utf8mb4                    |
| character_set_database   | utf8mb4                    |
| character_set_filesystem | binary                     |
| character_set_results    | utf8mb4                    |
| character_set_server     | utf8mb4                    |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

照合順序の設定値を確認します。

mysql> show variables like '%collation%';
+----------------------+--------------------+
| Variable_name        | Value              |
+----------------------+--------------------+
| collation_connection | utf8mb4_general_ci |
| collation_database   | utf8mb4_bin        |
| collation_server     | utf8mb4_bin        |
+----------------------+--------------------+

collation_connection は character_set_client, character_set_results, character_set_connection の値によって自動で設定されます。 my.cnf では設定できません。 collation_connection を my.cnf に設定するとエラーで起動できません。

ref. https://dev.mysql.com/doc/refman/8.0/ja/charset-connection.html

利用可能な照合順序を確認

mysql> show collation;

utf8mb4で利用可能な照合順序(collation)は以下のとおり。

  • utf8mb4_general_ci
  • utf8mb4_unicode_ci
  • utf8mb4_unicode_520_ci
  • utf8mb4_bin

socket

ref. MySQL クライアントからサーバーへの接続

mysql.socket

ローカルでMySQLが稼働している場合、ホスト(-h)を指定せずに接続する場合は、mysql.sockUNIXドメインソケットファイル)使用して接続する。MacではデフォルトでMySQLサーバー(mysqld)起動時に/tmp/mysql.socketファイルを作成する。

mysql.sockのパスを確認。

mysql > SHOW VARIABLES LIKE '%sock%';

ソケットファイルを使用しない

ホストを指定する(127.0.0.1)。

例)たとえばDockerでMySQLを稼働する(ホストの3306をコンテナの3306にマップする)。

$ docker run -d --name=5.7.41 -p 3306:3306 -v $(pwd):/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=password mysql:5.7.41

ホストを指定せず(mysql -u root -p)にコンテナのMySQLに接続すると Can't connect to local server through socket '/tmp/mysql.sock' (2)が発生する。 これはホストでMySQLが稼働していないので/tmp/mysql.socketが作成されていないため(リモート接続同様にTCP/IPで通信)。

ホストを指定(mysql -u root -p -h 127.0.0.1)してコンテナにアクセスする場合はmysql.sockを使用しないのでエラーは発生しない。

ソケットファイルの変更

my.confで変更することができる。
mysqldとclientは同じパスにする。

# my.cnf
[mysqld]
socket=/path/to/mysql.sock


[client]
socket=/path/to/mysql.sock