Posted at

MySQL 5.6でmysqld_multi stopが動かない

More than 3 years have passed since last update.

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'"

うーん、イケてない・・・