A volte durante una SNAFU devo correre kill query xxxxxxx
venti o trenta volte. Qualche tipo di kill all
comando che mi manca?
A causa di come non mi piace digitare.
A volte durante una SNAFU devo correre kill query xxxxxxx
venti o trenta volte. Qualche tipo di kill all
comando che mi manca?
A causa di come non mi piace digitare.
Risposte:
Dalla riga di comando di 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
È possibile modificare l'opzione grep nell'intestazione del ciclo for per individuare un utente specifico o una stringa specifica nella query.
Se hai MySQL 5.1 in cui la processlist si trova in INFORMATION_SCHEMA, puoi farlo per generare i comandi KILL QUERY in blocco dall'interno del client mysql:
SELECT GROUP_CONCAT(CONCAT('KILL QUERY ',id,';') SEPARATOR ' ') KillQuery
FROM information_schema.processlist WHERE user<>'system user'\G
È possibile eseguire clausole WHERE sul campo INFO per cercare una query specifica, il campo TIME su query a esecuzione prolungata o il campo DB su un database specifico.
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/