おもにサーバシステム変数を指定します。
my.cnf
です(※ ホームディレクトリに作成する場合は .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
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
上記の読み込み順は以下のとおりです。
上記は例で 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)は以下のとおり。
ローカルでMySQLが稼働している場合、ホスト(-h
)を指定せずに接続する場合は、mysql.sock
(UNIXドメインソケットファイル
)使用して接続する。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