Đôi khi trong SNAFU tôi phải chạy kill query xxxxxxx
hai mươi hoặc ba mươi lần. Bất kỳ loại kill all
lệnh tôi đang thiếu?
Trên tài khoản của cách tôi không thích gõ.
Đôi khi trong SNAFU tôi phải chạy kill query xxxxxxx
hai mươi hoặc ba mươi lần. Bất kỳ loại kill all
lệnh tôi đang thiếu?
Trên tài khoản của cách tôi không thích gõ.
Câu trả lời:
Từ dòng lệnh 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
Bạn có thể thay đổi tùy chọn grep trong tiêu đề của vòng lặp for để định vị một người dùng cụ thể hoặc chuỗi cụ thể trong truy vấn.
Nếu bạn có MySQL 5.1 trong đó danh sách quy trình nằm trong Information_SCHema, bạn có thể thực hiện việc này để tạo các lệnh KILL QUERY hàng loạt từ bên trong máy khách mysql:
SELECT GROUP_CONCAT(CONCAT('KILL QUERY ',id,';') SEPARATOR ' ') KillQuery
FROM information_schema.processlist WHERE user<>'system user'\G
Bạn có thể thực hiện các mệnh đề WHERE đối với trường INFO để tìm kiếm một truy vấn cụ thể, trường TIME đối với các truy vấn chạy dài hoặc trường DB đối với cơ sở dữ liệu cụ thể.
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/