Cách xóa các process đang sleep trong mysql server

Khi các bạn sử dụng mysql server 1 thời gian, trong trường hợp có nhiều kết nối đến server, một trong những tình huống bạn hay gặp phải đó là khi show proccesslist, các bạn sẽ thấy có nhiều process đang có trạng thái sleep.

Những process này có trang thái sleep vì những clinet kết nối đến mysql server, thực hiện truy vấn, và quên không đóng lại connections đến database. Do không đóng nên những connection đó vẫn ở lại và vẫn được mở, và nó được set command là status. Về cơ bản mysql server sẽ tự đóng các connection này khi nó quá timeout (mỗi connection tới mysql đều có timeout). Nhưng các bạn lại muốn tự dọn dẹp những connection như này và ở bài viết này mình sẽ hướng dẫn các bạn.

Đầu tiên các bạn login vào mysql dùng câu lệnh sau mysql -u root -p
B2 :Tiếp theo các bạn gõ show processlist để xem những connections nào đang được mở
B3: Sau đó xem đường dẫn lưu file mà mysql cho phép : SHOW VARIABLES LIKE “secure_file_priv”;
Ở trường hợp của mình, kết quả sẽ là /var/lib/mysql-files/
B4:Tiếp theo các bạn extract các process đang sleep vào 1 file nằm ở thư mục các bạn tìm thấy ở bước 3
Ví dụ mình sẽ xuất ra file sau : ‘/var/lib/mysql-files/a.txt’; thì câu lệnh sẽ là
select concat(‘KILL ‘,id,’;’) from information_schema.processlist where Command=’Sleep’ into outfile ‘/var/lib/mysql-files/a.txt’;

Các bạn có thể mở thử file a.txt để xem, cơ bản nó sẽ có format như này:
Kill abc
Kill def
abc và def là các processid trong mysql

B5: Các bạn mở file a.txt và nó sẽ tự kill các proccess đang sleep
source /var/lib/mysql-files/a.txt;

Vậy thôi, bây giờ các bạn có thể check lại các proccess sleep đã được xóa đi chưa.

Bonus:Cơ chế dọn dẹp là việc thường xuyên phải làm, ví vậy các bạn nên làm 1 file bash script như sau để nó tự động quá trình bên trên

Leave a Comment