オプションファイルの書式
オプションファイルには
多くの場合、[client]オプショングループが複数のプログラムから読み取られるなど、
オプショングループ
MySQL関連の各プログラムは、mysqldが[client]オプショングループを読み取るなど)
| プログラム | オプショングループ |
|---|---|
| mysqlcheck | [mysqlcheck], [client] |
| mysqlpump | [mysql_ |
| mysql | [mysql], [client] |
| mysql_ | [mysql_ |
| mysql_ | [mysql_ |
| mysql_ | [mysql_ |
| mysqladmin | [mysqladmin], [client] |
| mysqlbinlog | [mysqlbinlog], [client] |
| mysqldump | [mysqldump], [client] |
| mysqlimport | [mysqlimport], [client] |
| mysqlshow | [mysqlshow], [client] |
| mysqlslap | [mysqlslap], [client] |
| mysqltest | [mysqltest], [client] |
| my_ | 任意 |
| mysqld | [mysqld], [server], [mysqld-5. |
| myisamchk | [myisamchk] |
| myisampack | [myisampack] |
| mysqld_ | [mysqld_ |
※1)mysqlpump のバグであり本来は [mysqlpump] オプショングループが読み込まれるべきである
※2)
※3)
※4)
[client]オプショングループの誤った使い方
前の段落の表のとおり、[client]オプショングループはMySQLの各種コマンドラインクライアントから共通で読み取られるオプションを記述するためのオプショングループです。
ありがちな間違いとして、mysqlコマンドラインクライアントにしか存在しないオプションを[client]オプショングループに書いてしまい、mysqldumpやmysqladminが[client]オプショングループを読み込んだ際にuser=root、socket=/var/などはどのコマンドラインクライアントにも存在するオプションなので[client]オプショングループに書くのは間違いではありませんが、prompt= "\u@\h:\p"はmysqlコマンドラインクライアント専用のオプションのため、[client]オプショングループではなく[mysql]オプショングループに記載するべきですpromptオプションを[client]オプショングループに書いてしまったため、mysqldumpが--promptを設定しようとして
$ mysqldump -S /var/lib/mysql/mysql.sock -u root mysqldump: [ERROR] unknown variable 'prompt=\u@\h:\p> '
便利なloose接頭辞
MySQLには、
loose接頭辞はそれらの接頭辞の1つであり、
これはたとえば、
mysql> INSTALL PLUGIN mecab SONAME 'libpluginmecab.so'; ERROR 1123 (HY000): Can't initialize function 'mecab'; Plugin initialization function failed. $ less /var/log/mysqld.log .. 2016-11-13T16:16:58.192098Z 3 [ERROR] Mecab: createModel() failed: param.cpp(69) [ifs] no such file or directory: /export/home/pb2/build/sb_0-20230202-1472569797.71/mecab-0.996-el6-x86-64bit/etc/mecabrc 2016-11-13T16:16:58.192106Z 3 [ERROR] Plugin 'mecab' init function returned error. $ echo "loose-mecab-rc-file=/usr/lib64/mysql/mecab/etc/mecabrc" >> /etc/my.cnf $ service mysqld restart mysql> INSTALL PLUGIN mecab SONAME 'libpluginmecab.so'; Query OK, 0 rows affected (0.00 sec) $ less /var/log/mysqld.log .. 2016-11-13T16:22:46.807090Z 0 [Warning] unknown variable 'loose-mecab-rc-file=/usr/lib64/mysql/mecab/etc/mecabrc' .. 2016-11-13T16:23:11.475482Z 4 [Note] Mecab: Trying createModel(--rcfile=/usr/lib64/mysql/mecab/etc/mecabrc) 2016-11-13T16:23:11.491115Z 4 [Note] Mecab: Loaded dictionary charset is utf-8
1回目のINSTALL PLUGINではmecab-rc-fileオプションが指定されていないため、/export/にファイルを探しに行き、mecabプラグインがインストールされていない状態でオプションファイルにmecab-rc-fileオプションを設定すると、[ERROR] unknown variableによってMySQLサーバーが起動できなくなってしまいます。これを避けるために、loose接頭辞を使ったloose-mecab-rc-fileオプションを設定することで、[Warning] unknown variableの出力のみでサーバーを起動できるように、INSTALL PLUGINの時点ではmecab-rc-fileオプションの設定値を読み込み正しい場所にmecabrcファイルを探しに行くことができるようになります。
あるいは、default_などもこのloose接頭辞を使うことで設定することができます[client]オプショングループに設定したいオプションを、default_以外に思いつきませんでしたが)。
$ vim /etc/my.cnf .. [client] loose_default_character_set= utf8mb4 .. $ mysql --help | grep utf8mb4 default-character-set utf8mb4 $ mysqldump --help | grep utf8mb4 default-character-set utf8mb4 $ mysqlcheck --help | grep utf8mb4 default-character-set utf8mb4 $ mysqlbinlog --help | grep utf8mb4 mysqlbinlog: [Warning] unknown variable 'loose_default_character_set=utf8mb4'
オプションファイルとオプショングループを上手に使い分けて、
