Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

วิธี Kill Process ทั้งหมดใน MySQL show processlist

MySQL ไม่มีคำสั่ง Kill แบบหลาย Process พร้อมกัน (Mass Kill) จึงต้อง Kill ทีละ Process โดยใช้คำสั่ง KILL มาดูวิธีการกัน

ตรวจสอบ Process ที่ทำงานอยู่

mysql> SHOW PROCESSLIST;

ผลลัพธ์ตัวอย่าง:

+----+-----------------+-----------------+------+---------+------+------------------------+------------------+
| Id | User            | Host            | db   | Command | Time | State                  | Info             |
+----+-----------------+-----------------+------+---------+------+------------------------+------------------+
| 4  | event_scheduler | localhost       | NULL | Daemon  | 7986 | Waiting on empty queue | NULL             |
| 8  | root            | localhost:65180 | test | Query   | 0    | starting               | show processlist |
+----+-----------------+-----------------+------+---------+------+------------------------+------------------+
2 rows in set (0.00 sec)

Kill Process ที่รันนานเกิน 10 วินาที

ใช้คำสั่งนี้เพื่อสร้างคำสั่ง Kill อัตโนมัติ:

mysql> SELECT CONCAT('KILL ', id, ';')
    -> FROM information_schema.processlist
    -> WHERE TIME > 10;

ผลลัพธ์:

+-----------------------+
| CONCAT('KILL ', id, ';') |
+-----------------------+
| KILL 4;               |
+-----------------------+
1 row in set (0.00 sec)

จากนั้นนำคำสั่ง KILL 4; ไปรันจริง

วิธีทางเลือก: Kill ทั้งหมดด้วยคำสั่งเดียว (Linux/Unix)

mysql -e "SHOW FULL PROCESSLIST;" -ss | awk '{print "KILL "$1";"}' | mysql
คำเตือน: วิธีนี้จะ Kill ทุก Process รวมถึง system process ด้วย ควรใช้ด้วยความระมัดระวัง และควรกรองเฉพาะ Process ที่ต้องการจริงๆ