matar todas as consultas - MySQL

17

Às vezes, durante um SNAFU, tenho que correr kill query xxxxxxxvinte ou trinta vezes. kill allFalta algum tipo de comando?

Por conta de como eu não gosto de digitar.

JIStone
fonte
reiniciar o servidor?
Derek Downey #
@DTest - isso pode ser feito com uma consulta? Não tenho acesso direto ao servidor.
JIStone
Esta é uma pergunta que pode ser útil para outros desenvolvedores e DBAs (+1) !!!
RolandoMySQLDBA

Respostas:

15

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.

RolandoMySQLDBA
fonte
5
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/

philfreo
fonte
Na verdade, eu gosto dessa abordagem porque ela pode ser feita dentro dos limites do cliente mysql, independentemente do Linux ou Windows. +1 !!!
RolandoMySQLDBA