Mysql giết quá trình người dùng

Chúng ta có thể giết các tiến trình với sự trợ giúp của lệnh 'kill'. Tuy nhiên, bạn cần hủy từng tiến trình đó, vì MySQL không có bất kỳ lệnh hủy lớn nào

Để kiểm tra có bao nhiêu quy trình tồn tại, hãy sử dụng 'hiển thị danh sách quy trình'

mysql> show processlist;

Sau đây là đầu ra

+----+-----------------+-----------------+------+---------+------+------------------------+------------------+
| 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)

Để giết một tiến trình đã hoạt động hơn 10 giây, sau đây là truy vấn. Ở đây, chúng tôi đang giết một tiến trình với Id “4”

Khi nói đến việc loại bỏ các quy trình và truy vấn của MySQL, có một số điều bạn có thể thử. Dưới đây là một số cách tốt nhất để tiêu diệt các truy vấn và quy trình của MySQL. Lưu ý nhanh, nếu bạn sử dụng nhà cung cấp dịch vụ lưu trữ WooC Commerce tốt, bạn sẽ không phải điều chỉnh thủ công các quy trình MySQL để giữ cho trang web của mình trực tuyến

1. Biết danh sách các Quy trình

Chạy lệnh sau

show processlist; 

Điều này sẽ hiển thị tất cả các kết nối mở đến máy chủ. Nó bao gồm ID luồng, Người dùng, Máy chủ, DB, Thời gian, Trạng thái, Thông tin, v.v.

Trước khi thực hiện lệnh này, hãy đảm bảo rằng bạn có quyền quản trị viên. Lệnh xuất ra các truy vấn hiện đang chạy

2. Giết một chủ đề cụ thể

Nếu bạn biết “ID luồng” thì bạn có thể hủy luồng cụ thể đó bằng lệnh kill

Chỉ cần thực hiện lệnh sau

 kill thread_id;

Ví dụ: nếu ID luồng là 33, bạn có thể thực hiện lệnh sau để tắt luồng này

 kill 33;

3. Sử dụng CONCAT để giết nhiều Quy trình MySQL

Vì MySQL không có lệnh kill lớn, bạn có thể sử dụng “concat” để tạo các lệnh kill từ bảng Process list

Có nhiều cách bạn có thể làm điều này

Phương pháp 1

Chạy lệnh sau

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

Điều này sẽ giết tất cả các truy vấn MySQL của bạn

Phương pháp 2

Bạn có thể tạo một bảng từ danh sách quy trình

Chạy

 SELECT * FROM processlist\G; 

Bây giờ, sử dụng như sau

 SELECT CONCAT('KILL ',id,';') AS kill_list FROM information_schema.processlist WHERE user='root' AND info = 'SELECT * FROM processlist';

Điều này sẽ cho một đầu ra trông giống như thế này

________số 8

Bây giờ bạn có thể sử dụng một trong các cách sau để giết tất cả các chủ đề

1. Bằng cách chỉnh sửa văn bản theo cách thủ công

Sao chép đầu ra này trong tệp văn bản và xóa dấu gạch ngang, dấu cộng và dấu gạch ngang. Sau đó chạy tất cả các lệnh kill trong MySQL. Điều này sẽ giết tất cả các quá trình

2. Bằng cách sử dụng một lệnh để tạo một tệp đầu ra

Chạy lệnh sau

 SELECT CONCAT('KILL ',id,';') AS run_this FROM information_schema.processlist WHERE user='root' 
AND info = 'SELECT * FROM processlist' INTO OUTFILE '/tmp/kill_list.txt' 

Thao tác này sẽ tạo một tệp văn bản có tên “kill_list”. Bạn chỉ cần xóa dòng đầu tiên khỏi tệp văn bản (kill_list) vì đây không phải là lệnh MySQL hợp lệ

Bây giờ bạn có thể chạy cái này trong MySQL. Nó sẽ thực thi tất cả các câu lệnh trong tệp sẽ giết tất cả các luồng

Bạn cũng có thể nhập tệp này để hủy nhiều truy vấn MySQL cùng một lúc

+----+-----------------+-----------------+------+---------+------+------------------------+------------------+
| 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)
0

4. Giết tất cả các quy trình

Bạn có thể thử sử dụng truy vấn sau để hủy tất cả các quy trình

+----+-----------------+-----------------+------+---------+------+------------------------+------------------+
| 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)
1

5. Sử dụng tập lệnh PHP

Bạn có thể sử dụng tập lệnh PHP như sau

 kill thread_id;
0

6. Sử dụng thủ tục được lưu trữ để loại trừ các quy trình hiện tại

Bạn có thể tạo một thủ tục được lưu trữ để hủy tất cả các quy trình từng cái một mà không hủy các quy trình hiện đang được sử dụng

 kill thread_id;
1

Bạn có thể gọi nó bằng cách sử dụng

 kill thread_id;
2

7. Thủ tục được lưu trữ để giết các quy trình của một người dùng cụ thể

Bạn có thể tạo một thủ tục được lưu trữ có thể hủy tất cả các quy trình của một người dùng cụ thể

 kill thread_id;
3

Bạn có thể gọi thủ tục bằng cách đề cập đến tên người dùng của người dùng cơ sở dữ liệu có quy trình bạn muốn hủy. Giả sử người dùng là 'bob', bạn có thể sử dụng

 kill thread_id;
4

 

 

Vì vậy, bạn có thể tắt các truy vấn, quy trình hoặc luồng của MySQL bằng cách chạy các lệnh này. Bạn có thể nhận thấy lệnh “show processlist” hữu ích như thế nào trong việc xác định các phương thức cần loại bỏ. Vì không có một lệnh nào trong MySQL để hủy tất cả các quy trình, chúng tôi phải giải quyết bằng một giải pháp thay thế. Chúng tôi hy vọng bài viết này đã giúp bạn. Nếu bạn có cách tiếp cận mới, hãy tham gia thảo luận trong phần bình luận.