オプションファイルの書式
オプションファイルには
多くの場合、[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'
オプションファイルとオプショングループを上手に使い分けて、