実験用にmy.cnfを編集しやすくする。 Serversman@VPSにMySQLをインストールした際の備忘録(2)
$ less /etc/my.cnf #!include /usr/share/mysql/my-medium.cnf !include /usr/share/mysql/my-large.cnf !includedir /etc/mysql.d
$ less /etc/mysql.d/encoding.cnf [client] default-character-set = utf8 [mysqld] default-character-set = utf8
!include
と!includedir
を使って、my.cnfにあれこれ実験的な設定をしやすくしました。ApacheなどLinux上で良くあるように、設定ファイル本体 my.cnfと、mysql.d/*.cnfを上書き読み込みする設定ファイル群を置く形を、MySQLでもやってみました。
メリット
my-medium.cnfやmy-large.cnfといった、デフォルトとなる設定をした上で、/etc/mysql.dに置いた個別の.cnfファイルで読み込み時に上書きするので、何時でもデフォルトに戻せます。あと、デフォルトからどう変えたかも分かりやすいです。
更に、個別の.cnfファイルを役割毎にちゃんと分けて作れば、設定の見通しもよくなります。
実際に稼動させる環境ならこんな事はする必要ないと思いますが、my.cnfの設定やMySQLの動きを調べたり研究したりする場合は、便利になるんじゃないかと思います。
補足
!include
と!includedir
はグループ指定の影響を受けます。まずmy.cnfを読み込んだ上で、mysql.d/*.cnfが上書きする形で読み込まれないとダメなんですが、これを実現する為に工夫して、上記のようになりました。
$ less /etc/my.cnf !include all.cnf #all.cnfは必ず読み込まれる [client] !include client.cnf #clientグループの場合のみclient.cnfを読み込む [mysqld] !include mysqld.cnf #mysqldグループの場合のみmysqld.cnfを読み込む
グループ指定の影響を受けるというのは、こういうことです。つまり、必ず読み込まれるようにするには、my.cnfの最初の方に!include
や!includedir
を置く必要があります。ただそうすると、mysql.d/*.cnfの設定をmy.cnfの下のほうにある設定で上書きしてしまいます。
個別の.cnfファイルに[client]の様なグループを書けば、ちゃんとグループの指定として機能します。なのでmy.cnfでは、まずデフォルト設定をインクルードして、次に個別の.cnfファイルをインクルードする形になりました。
ちなみに、encoding.cnfを適用する前の初期値
mysql> show variables like "%char%"; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | latin1 | | character_set_connection | latin1 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | latin1 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.00 sec)
[mysqld]グループでdefault-character-set = utf8を設定
mysql> show variables like "%char%"; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | latin1 | | character_set_connection | latin1 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | latin1 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.00 sec)
上記に続けて[client]グループでdefault-character-set = utf8を設定
mysql> show variables like "%char%"; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.00 sec)