ubuntuのmysql-community-server 5.6.26のmysqld_multi stopがなんか動かない。
SHUTDOWN権限つけたユーザを作って、
> CREATE USER 'XXXXX'@'localhost' IDENTIFIED BY 'YYYYY';
> GRANT SHUTDOWN ON *.* TO 'XXXXX'@'localhost';
my.cnfにuserとpasswordを記載する。
[mysqld_multi]
user = XXXXX
password = YYYYY
でmysqld_multi stopを実行してみるんだが、
# mysqld_multi stop
停止されない。
ログを見てみると、
# cat /usr/share/mysql/mysqld_multi.log
Stopping MySQL servers
Warning: Using a password on the command line interface can be insecure.
/usr/bin/mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'XXXXX'@'localhost' (using password: YES)'
mysqld_multi log file version 2.16; run: Mon Aug 3 10:36:34 2015
権限エラーになっている。
/usr/bin/mysqld_multiの中身を見てみるとmysql_admin shutdownで停止しているようなので、実行しているコマンドを出力してみると、
$com= get_mysqladmin_options($i, @groups);
$com.= " shutdown";
$com.= " >> $opt_log 2>&1" if (!$opt_no_log);
$com.= " &";
print "$com\n"; ##追記
system($com);
# mysqld_multi stop
/usr/bin/mysqladmin -u XXXXX -p'*****' --port=3306 --socket=/xxx/mysql/mysqld.sock shutdown >> /usr/share/mysql/mysqld_multi.log 2>&1 &
パスワードが*****
にマスクされている・・・
内部で使ってるmy_print_defaultsのデフォルト動作っぽい。
# my_print_defaults --defaults-file=/etc/mysql/my.cnf mysqld_multi
--user=XXXXX
--password=*****
-sつけるといけるっぽいがmysql_multiのオプションとしては指定できなそう。
# my_print_defaults --defaults-file=/etc/mysql/my.cnf mysqld_multi -s
--user=XXXXX
--password=YYYYY
このへんのコードいじればいけるんだろうけど、mysql-server-communityは頻繁にアップデートしたり複数バージョン運用したりするからあんま手パッチしたくないなぁ。
my $com= join ' ', 'my_print_defaults', @defaults_options, $group;
my @defaults = `$com`;
というわけでいったんmy.cnfのmysqld_multiエントリは消して、mysqld_multiのオプションとして渡すことにした。
オペレーションで毎回入力はつらいのでaliasに記載。
# cat .bash_aliases
alias mysqld_multi="mysqld_multi --user=XXXXX --password='YYYYY'"
うーん、イケてない・・・