Tôi cần một cách hiệu quả để ngắt kết nối tất cả các máy khách với tên người dùng đã cho khỏi MySQL. Tôi đã nghĩ về việc thay đổi mật khẩu người dùng nhưng tôi nghĩ rằng nó chỉ được kiểm tra khi kết nối được thực hiện.
Ý tưởng?
Tôi cần một cách hiệu quả để ngắt kết nối tất cả các máy khách với tên người dùng đã cho khỏi MySQL. Tôi đã nghĩ về việc thay đổi mật khẩu người dùng nhưng tôi nghĩ rằng nó chỉ được kiểm tra khi kết nối được thực hiện.
Ý tưởng?
Câu trả lời:
Bạn có thể sử dụng phương thức "SQL to SQL" bên dưới (chỉ cần chuyển các tùy chọn kết nối bổ sung cho máy khách mysql nếu cần):
shell> mysql -NBe "SELECT CONCAT('KILL ', id, ';') FROM information_schema.processlist WHERE user = 'some_username';" | mysql -vv
Lưu ý: Điều này hoạt động với MySQL 5.1 và 5.5. Điều này sẽ phải được triển khai khác nhau đối với các phiên bản MySQL cũ hơn vì information_schema không có bảng danh sách quy trình.
Tùy chọn được sử dụng:
-N means that you do not want to get column names back.
-B puts it into batch mode, so that you do not get MySQL's table layout.
-e executes the following statement.
-v controls the verbosity, could be used up to three times.
Giải thích về cách thức hoạt động của nó:
Đầu tiên, các câu lệnh KILL được tạo cùng với ID.
shell> mysql -NBe "SELECT CONCAT('KILL ', id, ';') FROM information_schema.processlist WHERE user = 'some_username';"
Đầu ra mẫu:
KILL 1061;
KILL 1059;
KILL 1057;
Sau đó, các tuyên bố được thực hiện.
shell> mysql -NBe "SELECT CONCAT('KILL ', id, ';') FROM information_schema.processlist WHERE user = 'some_username';" | mysql -vv
Đầu ra mẫu:
--------------
KILL 1061
--------------
Query OK, 0 rows affected
--------------
KILL 1059
--------------
Query OK, 0 rows affected
--------------
KILL 1057
--------------
Query OK, 0 rows affected
Trên linux bạn có thể sử dụng một cái gì đó như thế.
Cách tiếp cận của tôi rất đơn giản. Trong bước đầu tiên, chúng tôi gửi 'hiển thị danh sách quy trình' đến cơ sở dữ liệu của chúng tôi. Kết quả là một danh sách với tất cả người dùng được kết nối. Trong bước tiếp theo, chúng tôi sử dụng lệnh grep cũ tốt để lọc tên người dùng. Với awk, chúng tôi tạo ra 'lệnh kill'. Trong bước cuối cùng, chúng tôi gửi tất cả các lệnh kill tới mysql. Tất cả mọi thứ phải được nối với | Biểu tượng.
mysql -uroot -e 'show processlist' | grep username | awk {'print "kill "$1";"'}| mysql -uroot