下記のようなコマンドで実行できます。{}で囲った部分は実際の運用に応じて値をあてこんでください。
mysql -u{user} -p{password} -e "SELECT CONCAT('kill ', pl.id, ';') FROM information_schema.processlist AS pl INNER JOIN information_schema.innodb_trx AS trx ON trx.trx_mysql_thread_id = pl.id WHERE pl.time > {time_to_kill};" |sed -e '1,1d' | mysql -u{user} -p{pass}
上記のコマンドの簡単な解説です。
- information_schemaのprocesslistテーブルとトランザクションを管理しているinnodb_trxテーブルをjoinして、{time_to_kill}秒以上実行されているプロセスを特定し、特定したプロセスをkillするsqlコマンドを生成
mysql -u{user} -p{password} -e "SELECT CONCAT('kill ', pl.id, ';') FROM information_schema.processlist AS pl INNER JOIN information_schema.innodb_trx AS trx ON trx.trx_mysql_thread_id = pl.id WHERE pl.time > {time_to_kill};"
- 生成された行の1行目はヘッダーなので削除(sedコマンドを使って、1行目から1行目までを削除)。
sed -e '1,1d'
- 最後の部分で、生成されたsqlをmysqlに流し込んで実行させる。
コメント