mysqld_multi stop failed + fabricのsudoユーザーでのコマンド回避策
mysqld_multi stopが出来ない。。。
設定の問題の可能性はあるけど。(設定の問題でした。)
start reportは正常でstopだけ出来ないというのは・・・
http://serverfault.com/questions/400182/mysqld-multi-stop-doesnt-seem-to-work
同様の人がいるようなので諦めてmysqladminで
と思ったのですが、/etc/my.cnfや~/.my.cnfのmysqld_multiの設定 user passwordのところがおかしかっただけのようで
で start stop report問題なく出来ました。
fabricから他ユーザーで実行したときの挙動がいまいちだったので。いろいろ試した。
mysqlはanyusernameというユーザー名の人が実行している場合。
fab -H localhost -p pass stop_mysql
local(‘sudo -u anyusername mysqld_multi –defaults-file=%s –verbose –user=root –log=%s %s’ % ( mycnf, errorlog, cmd ))
とりあえず、これでstopまで問題なく行けたが。
with settings(sudo_user=”anyusername”):
sudo(‘mysqld_multi –defaults-file=%s –verbose –user=root –log=%s %s’ % ( mycnf, errorlog, cmd ))
や
sudo( … , user=2222 ) #ユーザーID指定
run(‘sudo -u anyusername …
の3つは失敗する
run(‘mysqladmin -u root -h 127.0.0.1 -P 29016 shutdown’)
は余裕で成功。mysqld_multiの中でmysqladmin呼んでるだけだろうけど、このやり方で良いのか謎。
# fabricでlocalでしか成功しないので。
def local_control_mysql(cmd,mycnf,errorlog):
local(‘id’)
local(‘mysqld_multi –defaults-file=%s –verbose –user=root –log=%s %s’ % ( mycnf, errorlog, cmd ))
def control_mysql( cmd=’start’, type=’default’, dbrole=’slave’ ):
mycnf = ”
errorlog = ”
with settings(sudo_user=env.config_app_name):
with cd( env.config_app_dirs['app'] ):
sudo(‘fab local_control_mysql:cmd=%s,mycnf=”%s”,errorlog=”%s”‘ % ( cmd, mycnf, errorlog ))
sudo_user=ユーザー名(上の例で言うとanyusername)でwithしそのまま localhostのfabコマンドを実行する。
とりあえずこれで完成。