Manchmal muss ich während einer SNAFU kill query xxxxxxxzwanzig oder dreißig Mal laufen . Fehlt kill allmir irgendein Befehl?
Aufgrund dessen, dass ich nicht gerne tippe.
Manchmal muss ich während einer SNAFU kill query xxxxxxxzwanzig oder dreißig Mal laufen . Fehlt kill allmir irgendein Befehl?
Aufgrund dessen, dass ich nicht gerne tippe.
Antworten:
Über die Linux-Befehlszeile
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
Sie können die Option grep im Header der for-Schleife ändern, um einen bestimmten Benutzer oder eine bestimmte Zeichenfolge in der Abfrage zu suchen.
Wenn Sie MySQL 5.1 haben, dessen Prozessliste sich in der INFORMATION_SCHEMA befindet, können Sie dies tun, um die KILL QUERY-Befehle in großen Mengen aus dem mysql-Client heraus zu generieren:
SELECT GROUP_CONCAT(CONCAT('KILL QUERY ',id,';') SEPARATOR ' ') KillQuery
FROM information_schema.processlist WHERE user<>'system user'\G
Sie können WHERE-Klauseln für das INFO-Feld verwenden, um nach einer bestimmten Abfrage zu suchen, das TIME-Feld für lang laufende Abfragen oder das DB-Feld für eine bestimmte Datenbank.
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/