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
- Biết danh sách các quy trình
- Giết một chủ đề cụ thể
- Sử dụng CONCAT để tiêu diệt nhiều quy trình MySQL
- Giết tất cả các quy trình
- Sử dụng Tập lệnh PHP
- Sử dụng thủ tục được lưu trữ để loại trừ các quy trình hiện tại
- Thủ tục được lưu trữ để giết các quy trình của một người dùng cụ thể
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
+------------------------+ | kill_list | +------------------------+ | KILL 1; | | KILL 2; | | KILL 3; | | KILL 4; | +------------------------+
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
________số 84. 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
mysql -e "show full processlist;" -ss | awk '{print "KILL "$1";"}'| mysql
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ừng quy trình 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.
Các quy trình MySQL không cần thiết có thể gây ra các vấn đề về hiệu suất trên hệ thống của bạn. Theo thời gian, các luồng đang hoạt động chồng chất và làm ngưng trệ máy chủ của bạn, ngăn người dùng truy cập vào các bảng và thực hiện các yêu cầu
Khi mức sử dụng tài nguyên quá cao, bạn có thể cần phải tắt các tiến trình MySQL. Hướng dẫn này sẽ chỉ cho bạn cách xác định các quy trình MySQL và hủy một quy trình
điều kiện tiên quyết
- Truy cập vào cửa sổ dòng lệnh/thiết bị đầu cuối
- Đã cài đặt MySQL hoặc MariaDB
- Người dùng có quyền sudo hoặc quyền root
Cách tìm danh sách quy trình MySQL
Trước khi bạn có thể định vị một tiến trình và giết nó, bạn phải truy cập máy chủ MySQL cục bộ hoặc từ xa. Để đăng nhập vào tài khoản cục bộ MySQL của bạn với quyền root, hãy mở terminal và nhập
kill thread_id;5
Nhập mật khẩu khi được nhắc. Khi trình bao MySQL tải, dấu nhắc hiển thị
kill 33;3
Để định vị quá trình cần hủy hoặc chấm dứt, hãy tải danh sách có tất cả các phiên đang hoạt động.
Trong MySQL shell, hãy sử dụng truy vấn này.
kill thread_id;6
Đầu ra hiển thị các thông tin sau
Bạn có thể có nhiều mục hơn trong danh sách của mình. Lưu ý
kill 33;4 của quy trình bạn muốn hủy. Cột
kill 33;5 giúp bạn xác định quy trình chạy lâu nhất. Đó thường là những thứ bạn muốn chấm dứt trước
Làm thế nào để giết quá trình MySQL
Để hủy một phiên MySQL khỏi danh sách, hãy sử dụng truy vấn
kill 33;6 theo sau chuỗi
kill 33;4 mà bạn đã lưu ý trước đó
kill thread_id;7
Shell hiển thị trạng thái truy vấn và số lượng hàng bị ảnh hưởng. “Truy vấn OK, 0 hàng bị ảnh hưởng [0. 06 giây]. ” Truy vấn này kết thúc kết nối đến cơ sở dữ liệu, bao gồm tất cả các hoạt động liên quan đến kết nối
Hãy nhớ rằng người dùng phải có đặc quyền thích hợp để có thể giết một tiến trình
Cách tiêu diệt tất cả các quy trình MySQL cho một người dùng cụ thể
MySQL không có một lệnh duy nhất để giết tất cả các quy trình
Để hủy tất cả các quy trình cho một người dùng cụ thể, hãy sử dụng
kill thread_id;61 để tạo tệp có danh sách các luồng và câu lệnh. Trong trường hợp của chúng tôi, chúng tôi đã nhập root với tư cách là người dùng. Để chỉ định người dùng khác, hãy thay thế root bằng tên người dùng mong muốn
kill thread_id;9
Truy vấn này đã tạo một tệp có tên process_list. txt. Bạn có thể chỉnh sửa tên theo ý thích của bạn. Mở tệp và xem lại xem đó có phải là các quy trình bạn muốn hủy không. Khi bạn đã sẵn sàng, hãy nhập
kill 33;0
Bạn có thể thêm điều kiện vào truy vấn để thu hẹp danh sách các quy trình trong tệp đầu ra. Ví dụ: thêm
kill thread_id;62 vào lệnh để chỉ bao gồm các quy trình có giá trị thời gian cao hơn 1000
kill 33;2
Phần kết luận
Hướng dẫn này đã vạch ra cách dễ nhất để tìm và tiêu diệt các tiến trình MySQL. Đảm bảo rằng bạn luôn kiểm tra kỹ xem bạn đang kết thúc quy trình nào trước khi chạy truy vấn MySQL