my.cnfの場所にハメられた。。。

MySQLが読み込むmy.cnfは

mysql --help | grep my.cnf
                      order of preference, my.cnf, $MYSQL_TCP_PORT,
/etc/mysql/my.cnf /etc/my.cnf ~/.my.cnf 

でわかります。が、これ、読み込まれる優先順位が

  1. ~/.my.cnf
  2. /etc/my.cnf
  3. /etc/mysql/my.cnf

※ MySQL5.1.73

であることに注意しましょう。まあ、/etc/my.cnf以外そんな使わないと思いますが。
もうひとつ注意があります。

「データディレクトリ/my.cnf」は「/etc/my.cnf」よりも優先される。

例えばデータディレクトリが/var/lib/mysql/だった場合、/var/lib/mysql/my.cnfは/etc/my.cnfよりも優先されます。
そして~/.my.cnfよりは優先されないです。つまり、

  1. ~/.my.cnf
  2. /var/lib/mysql/my.cnf
  3. /etc/my.cnf
  4. /etc/mysql/my.cnf

っていう優先順位になります。この辺りは以下の様にそれぞれのmy.cnfに個別のserver_idを割り振って確認してみました。

[mysqld]
server-id=1
[mysqld]
server-id=2
[mysqld]
server-id=3
[mysqld]
server-id=4
mysql> SHOW GLOBAL VARIABLES LIKE 'server_id';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 1     |
+---------------+-------+
1 row in set (0.00 sec)

いくら/etc/my.cnfを変更しても反映されなかったので、何だ?って思ってたら/var/lib/mysql/my.cnfが読み込まれていたぜこのやろう。

ちなみに

MySQL5.1の話。その他のバージョンでは確認していません。

2014年7月12日追記: と思っていたらmy.cnfの読み込み順序があって、あとで読み込んだファイルの設定で上書きされていただけなんですね。~/.my.cnfが一番最後に読み込まれるので、ここに設定している値が反映されるわけです。

コメントを残す