Às vezes, durante um SNAFU, tenho que correr kill query xxxxxxx
vinte ou trinta vezes. kill all
Falta algum tipo de comando?
Por conta de como eu não gosto de digitar.
Às vezes, durante um SNAFU, tenho que correr kill query xxxxxxx
vinte ou trinta vezes. kill all
Falta algum tipo de comando?
Por conta de como eu não gosto de digitar.
Respostas:
Na linha de comando do Linux
for PROC_TO_KILL in `mysql -h... -u... -p... -A --skip-column-names -e"SHOW PROCESSLIST" | grep -v "system user" | awk '{print $1}'` ; do mysql -h... -u... -p... -A --skip-column-names -e"KILL QUERY ${PROC_TO_KILL}" ; done
Você pode alterar a opção grep no cabeçalho do loop for para localizar um usuário específico ou uma sequência específica na consulta.
Se você possui o MySQL 5.1 onde a lista de processos está no arquivo Information_SCHEMA, você pode fazer isso para gerar os comandos KILL QUERY em massa a partir do cliente mysql:
SELECT GROUP_CONCAT(CONCAT('KILL QUERY ',id,';') SEPARATOR ' ') KillQuery
FROM information_schema.processlist WHERE user<>'system user'\G
Você pode fazer cláusulas WHERE no campo INFO para procurar uma consulta específica, o campo TIME em consultas de longa execução ou o campo DB em um banco de dados específico.
mysql> select concat('KILL ',id,';') from information_schema.processlist where user='root' into outfile '/tmp/a.txt';
Query OK, 2 rows affected (0.00 sec)
mysql> source /tmp/a.txt;
Query OK, 0 rows affected (0.00 sec)
http://www.mysqlperformanceblog.com/2009/05/21/mass-killing-of-mysql-connections/