my.cnf
my.cnf
を読み込むmy.cnf
の値を常に優先するmy.cnf
で設定した値はクエリ`select variables like '%keyword%'で確認できる設定ファイルは以下のコマンドで確認できる。
$ 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
上記の読み込み順は上記の例では以下のようになる。
# my.cnf
[mysqld]
default-time-zone = 'Asia/Tokyo'
mysql > show variables like '%time_zone%';
JSTは日本時間
+------------------+--------+
| Variable_name | Value |
+------------------+--------+
| system_time_zone | JST |
| time_zone | SYSTEM |
+------------------+--------+
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
※ character_set_client、character_set_connection、character_set_database、character_set_results はデフォルトで utf8mb4 のはずだが設定しておくと安心。
※ 文字コードの照合順序を表す collation-server=utf8mb4_bin
を必ず記載する。
※ mysql コマンドでオプションを指定するときは character_set_server は character-set-server とハイフンになる(逆に言うと my.cnf で指定する場合は character_set_server とアンダースコアを使用する。
上記のmy.cnfでのcharacter
関連の設定値。
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/ |
+--------------------------+----------------------------+
collotion関連の設定値。
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 variables like 'char%';
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