#
ドキュメント

Document

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

内容

設定ファイル

  • MySQLの設定ファイルはmy.cnf
  • MySQLは(あれば)複数の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 

上記の読み込み順は上記の例では以下のようになる。

  1. /etc/my.cnf
  2. /etc/mysql/my.cnf
  3. /usr/local/etc/my.cnf
  4. ~/.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も必ず記載する。

上記の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)は以下のとおり。

  • 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