モヒカンは正義

プログラマー風林火山で言う「風のエンジニア」になりたい(比較的)若者Webエンジニアの備忘録

mysqldumpしたら "unknown option '--show-warnings'" と怒られる問題

概要

f:id:pinkumohikan:20190721203820p:plain

背景

mysqlやmysqldumpなどのコマンドを実行するとき、 .my.cnf という名前の設定ファイルを用意しておくと文字コードやホスト名、パスワードなどのオプションを省略することができる。

dev.mysql.com

自分は下記のように show-warnings というオプションを設定していた。mysqlコマンドでは通常、warningの出るDB操作を行ってもwarningは表示されないが、このオプションを設定しておくとコンソールに警告メッセージを表示してくれるようになる。警告を握りつぶして良いことなど何一つとしてないので、必ず指定しておきたいオプションだ。

.my.cnf

[client]
show-warnings

警告の例

mysql> drop table if exists db.not_found_table;
Query OK, 0 rows affected, 1 warning (0.01 sec)

Note (Code 1051): Unknown table 'db.not_found_table'

だが、この設定をしたままmysqldumpを実行すると下記のように怒られてしまう。

$ mysqldump dump_target_table
mysqldump: [ERROR] unknown option '--show-warnings'.

原因と対策

原因は show-warnings オプションはmysqlコマンドにはあるがmysqldumpにはないため、存在しないオプション指定してんじゃねえぞと怒られているわけである。

解決策としては、 show-warnings オプションを [client] というgroupではなく [mysql] というgroupに記載すれば、mysqlコマンドのときだけオプションを適用することができた。

before

[client]
show-warnings

after

[mysql]
show-warnings

ドキュメントとしてはこの辺り:

dev.mysql.com

If an option group name is the same as a program name, options in the group apply specifically to that program. For example, the [mysqld] and [mysql] groups apply to the mysqld server and the mysql client program, respectively.

The [client] option group is read by all client programs provided in MySQL distributions (but not by mysqld). To understand how third-party client programs that use the C API can use option files, see the C API documentation at Section 28.7.7.50, “mysql_options()”.

これでmysqldumpを実行するときだけ show-warnings をコメントアウトするというつらい運用から開放される!