MySQL5.6で-pオプションをつけてコマンド&スクリプトを実行する時のWarningを回避する方法


 mysql5.6以後では、-pオプションをつけてmysql、mysqladmin、mysqldumpを実行する時、以下のWarningが表示されます。

$ /usr/bin/mysql -u root -ppassowrd -e 'SELECT * FROM information_schema.PROCESSLIST;'
Warning: Using a password on the command line interface can be insecure.
+--------+------+----------------+-----------+---------+-------+-----------+----------------------------------------------+
| ID     | USER | HOST           | DB        | COMMAND | TIME  | STATE     | INFO                                         |
+--------+------+----------------+-----------+---------+-------+-----------+----------------------------------------------+
| 122379 | root | localhost      | NULL      | Sleep   |  1462 |           | NULL                                         |
| 122393 | root | localhost      | NULL      | Query   |     0 | executing | SELECT * FROM information_schema.PROCESSLIST |
+--------+------+----------------+-----------+---------+-------+-----------+----------------------------------------------+

 実行はできるんですが、問題なのは、cronで動いている時、MAILTOが設定されると、この警告に引っかかって、メールが飛んできます。

 さらに起きた問題なのはzabbix監視です。
 例えば、zabbixでmysqlのプロセス数を監視するために、以下のスクリプトを作りました。

#!/bin/sh
PASSWORD="password"

PROCESS_COUNT=`/usr/bin/mysql -u root -p${PASSWORD} -N -e 'SELECT count(*) FROM information_schema.PROCESSLIST;'`

echo ${PROCESS_COUNT}

 zabbix上にはグラフで表示するように、データ型が数値(整数)であるアイテムを作成しました。
 

 zabbixからスクリプトを実行する時、当前「Warning: Using a password on the command line interface can be insecure.」が出ました。
 実行結果は数字ではありませんので、zabbixのアイテムのステータスが取得不可になり、正常に監視ができません。
 

回避方法

 環境変数MYSQL_PWDを使います。

 上記のスクリプトを以下のように修正すれば、Warningが出なくなりました。

#!/bin/sh
PASSWORD="password"

PROCESS_COUNT=`MYSQL_PWD=${PASSWORD} /usr/bin/mysql -u root -N -e 'SELECT count(*) FROM information_schema.PROCESSLIST;'`

echo ${PROCESS_COUNT}

 もちろん、zabbix監視も動いて、グラフも生成されました。
 

参考