ฆ่าแบบสอบถามทั้งหมด - MySQL


17

บางครั้งในช่วง SNAFU ฉันต้องวิ่งkill query xxxxxxxยี่สิบหรือสามสิบครั้ง kill allคำสั่งประเภทใดที่ฉันขาดหายไป?

เพราะฉันไม่ชอบพิมพ์


รีสตาร์ทเซิร์ฟเวอร์หรือไม่
ดีเร็กดาวนีย์

@DTest - สามารถทำกับแบบสอบถามได้หรือไม่ ฉันไม่สามารถเข้าถึงเซิร์ฟเวอร์โดยตรง
JIStone

นี่เป็นคำถามที่มีประโยชน์สำหรับนักพัฒนาและ DBA อื่น ๆ (+1) !!!
RolandoMySQLDBA

คำตอบ:


15

จากบรรทัดคำสั่ง 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

คุณสามารถเปลี่ยนตัวเลือก grep ในส่วนหัวของ for loop เพื่อค้นหาผู้ใช้หรือสตริงเฉพาะในแบบสอบถาม

หากคุณมี MySQL 5.1 ซึ่งรายการกระบวนการอยู่ใน INFORMATION_SCHEMA คุณสามารถทำสิ่งนี้เพื่อสร้างคำสั่ง KILL QUERY จำนวนมากจากภายในไคลเอนต์ mysql:

SELECT GROUP_CONCAT(CONCAT('KILL QUERY ',id,';') SEPARATOR ' ') KillQuery
FROM information_schema.processlist WHERE user<>'system user'\G

คุณสามารถทำ WHERE clause กับฟิลด์ INFO เพื่อค้นหาเคียวรีเฉพาะฟิลด์ TIME กับเคียวรีที่รันนานหรือฟิลด์ DB กับฐานข้อมูลเฉพาะ


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/


ฉันชอบวิธีนี้มากเพราะสามารถทำได้ภายในขอบเขตของไคลเอนต์ mysql โดยไม่คำนึงถึง Linux หรือ Windows +1 !!!
RolandoMySQLDBA
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.