クライアントにはdefault-character-setを指定したいけどmysqlbinlogには怒られたくない
my.cnfには[group]
というオプショングループが書けて、グループ毎に設定ができます。
オプショングループには特殊な[client]
というのがあります。
[client]オプショングループは、すべてのクライアントプログラム(mysqldは除く)によって解読されます。これによって全てのクライアントに当てはまるオプションを指定することが可能になります。
MySQL :: MySQL 5.6 リファレンスマニュアル :: 4.2.6 オプションファイルの使用
なので[client]
にdefault-character-set = utf8
と書いておけば、(my.cnfを解釈する)全てのクライアントにdefault-character-setをセットすることが可能です。
ところがdefault-character-setを解さないクライアントの場合はエラーになってしまいます。例えばmysqlbinlogコマンドがそうです。
$ mysqlbinlog mysqlbinlog: unknown variable 'default-character-set=utf8'
こういったときこそ loose- の出番です。
my.cnfに、
[client] port = 3306 socket = /var/lib/mysql/mysql.sock loose-default-character-set = utf8
と書いておけばOKです。
ググると今回のようなmysqlbinlogの問題の解決法としてmysqlbinlogに--no-defaults
を添えて実行する、というのが散見されますが、
- my.cnfに書いた設定が全部無視される
- いちいち指定するのがめんどい
ので、前置 loose- を使ったほうがいいんじゃないかと思います。