Hướng dẫn kill mysql query - giết truy vấn mysql

Không, không có lệnh mysql tích hợp cho điều đó. Có nhiều công cụ và tập lệnh khác nhau hỗ trợ nó, bạn có thể giết một số kết nối theo cách thủ công hoặc khởi động lại máy chủ (nhưng nó sẽ chậm hơn).no built-in MySQL command for that. There are various tools and scripts that support it, you can kill some connections manually or restart the server (but that will be slower).

Nội phân chính

  • Phương pháp 1. Giết kết nối MySQL & nbsp; dựa trên đăng nhập người dùng & nbsp; sử dụng một sự kiện
  • Chấm dứt kết nối MySQL & nbsp; dựa trên đăng nhập người dùng & nbsp; sử dụng một sự kiện gọi quy trình được lưu trữ
  • Phương pháp 2. Tạo tệp BAT để khởi chạy máy khách MySQL và quy trình với các tham số

Sử dụng SHOW PROCESSLIST để xem tất cả các kết nối và KILL ID quy trình bạn muốn giết.

Bạn có thể chỉnh sửa cài đặt thời gian chờ để có trình nền MySQL tự giết các quy trình không hoạt động hoặc tăng số lượng kết nối. Bạn thậm chí có thể giới hạn số lượng kết nối trên mỗi tên người dùng, để nếu quá trình tiếp tục sai, quá trình bị ảnh hưởng duy nhất là chính quá trình và không có máy khách nào khác trên cơ sở dữ liệu của bạn bị khóa.limit the amount of connections per username, so that if the process keeps misbehaving, the only affected process is the process itself and no other clients on your database get locked out.

Nếu bạn không thể kết nối bản thân nữa với máy chủ, bạn nên biết rằng MySQL luôn bảo lưu 1 kết nối thêm cho người dùng với đặc quyền SUPER. Trừ khi quá trình vi phạm của bạn là vì một số lý do sử dụng tên người dùng với đặc quyền đó ...SUPER privilege. Unless your offending process is for some reason using a username with that privilege...

Sau đó, sau khi bạn có thể truy cập lại cơ sở dữ liệu của mình, bạn nên sửa chữa quy trình (trang web) sinh sản đó nhiều kết nối.

Bảo trì cơ sở dữ liệu hoặc máy chủ thường được thực hiện bởi các quản trị viên cơ sở dữ liệu vào ban đêm. Nhưng những thói quen này đôi khi bị chặn bởi các truy vấn hoặc ứng dụng chạy dài treo trên các khóa lâu hơn nhiều so với dự kiến.

Thường xuyên, mức độ ưu tiên được dành cho ứng dụng và các thói quen bảo trì thường bị hủy để không can thiệp vào ứng dụng. Nhưng đôi khi điều đó xảy ra là bạn cần phải giết một truy vấn MySQL tốn thời gian và đã hoàn thành vào một thời điểm nhất định. Trong trường hợp này, bạn có thể cần một cách nhanh chóng để chấm dứt kết nối liên quan.

Trong bài viết này, chúng tôi mong muốn xem xét hai cách để giải quyết vấn đề nêu trên. Chúng tôi sẽ sử dụng DBForge Studio cho MySQL cho mục đích đó.

Phương pháp 1. Giết kết nối MySQL & nbsp; dựa trên đăng nhập người dùng & nbsp; sử dụng một sự kiện

Chấm dứt kết nối MySQL & nbsp; dựa trên đăng nhập người dùng & nbsp; sử dụng một sự kiện gọi quy trình được lưu trữ

Phương pháp 2. Tạo tệp BAT để khởi chạy máy khách MySQL và quy trình với các tham số
[code lang=”SQL”]DELIMITER $
CREATE EVENT kill_process_event
ON SCHEDULE EVERY ‘1’ DAY
STARTS ‘2019-03-20 08:45:30’
DO
BEGIN
DECLARE kill_done int;
DECLARE EXIT HANDLER FOR NOT FOUND SET kill_done = 1;
BEGIN
DECLARE cursor_ID int;
DECLARE cursor_i CURSOR FOR
SELECT
id
FROM information_schema.PROCESSLIST
WHERE USER LIKE ‘test%’
AND ID != CONNECTION_ID();
OPEN cursor_i;
read_loop:
LOOP
FETCH cursor_i INTO cursor_ID;
KILL CONNECTION cursor_ID;
IF kill_done THEN
LEAVE read_loop;
END IF;
END LOOP;
CLOSE cursor_i;
END;
END
$

Sử dụng SHOW PROCESSLIST để xem tất cả các kết nối và KILL ID quy trình bạn muốn giết.
ENABLE
$

Bạn có thể chỉnh sửa cài đặt thời gian chờ để có trình nền MySQL tự giết các quy trình không hoạt động hoặc tăng số lượng kết nối. Bạn thậm chí có thể giới hạn số lượng kết nối trên mỗi tên người dùng, để nếu quá trình tiếp tục sai, quá trình bị ảnh hưởng duy nhất là chính quá trình và không có máy khách nào khác trên cơ sở dữ liệu của bạn bị khóa.
Next steps

Nếu bạn không thể kết nối bản thân nữa với máy chủ, bạn nên biết rằng MySQL luôn bảo lưu 1 kết nối thêm cho người dùng với đặc quyền SUPER. Trừ khi quá trình vi phạm của bạn là vì một số lý do sử dụng tên người dùng với đặc quyền đó ...
• Schedule the Event
• Set the server variable event_scheduler = ON

Sau đó, sau khi bạn có thể truy cập lại cơ sở dữ liệu của mình, bạn nên sửa chữa quy trình (trang web) sinh sản đó nhiều kết nối.
To schedule the Event, right-click it in the Object Explorer and select Edit Event from the pop-up window. In the wizard that opens, you can configure Start and End date, Recurrence, and other relevant options for the Event.

Bảo trì cơ sở dữ liệu hoặc máy chủ thường được thực hiện bởi các quản trị viên cơ sở dữ liệu vào ban đêm. Nhưng những thói quen này đôi khi bị chặn bởi các truy vấn hoặc ứng dụng chạy dài treo trên các khóa lâu hơn nhiều so với dự kiến.

Thường xuyên, mức độ ưu tiên được dành cho ứng dụng và các thói quen bảo trì thường bị hủy để không can thiệp vào ứng dụng. Nhưng đôi khi điều đó xảy ra là bạn cần phải giết một truy vấn MySQL tốn thời gian và đã hoàn thành vào một thời điểm nhất định. Trong trường hợp này, bạn có thể cần một cách nhanh chóng để chấm dứt kết nối liên quan.

Trong bài viết này, chúng tôi mong muốn xem xét hai cách để giải quyết vấn đề nêu trên. Chúng tôi sẽ sử dụng DBForge Studio cho MySQL cho mục đích đó.

Phương pháp đầu tiên bao gồm việc tạo ra một sự kiện MySQL đặc biệt. Khi bạn tạo một sự kiện, bạn tạo một đối tượng cơ sở dữ liệu được đặt tên chứa một hoặc nhiều câu lệnh SQL sẽ được thực thi theo một hoặc nhiều khoảng thời gian thông thường, bắt đầu và kết thúc vào một ngày và thời gian cụ thể.

Chấm dứt kết nối MySQL & nbsp; dựa trên đăng nhập người dùng & nbsp; sử dụng một sự kiện gọi quy trình được lưu trữ

Phương pháp 2. Tạo tệp BAT để khởi chạy máy khách MySQL và quy trình với các tham số

  1. Sử dụng SHOW PROCESSLIST để xem tất cả các kết nối và KILL ID quy trình bạn muốn giết.

Bạn có thể chỉnh sửa cài đặt thời gian chờ để có trình nền MySQL tự giết các quy trình không hoạt động hoặc tăng số lượng kết nối. Bạn thậm chí có thể giới hạn số lượng kết nối trên mỗi tên người dùng, để nếu quá trình tiếp tục sai, quá trình bị ảnh hưởng duy nhất là chính quá trình và không có máy khách nào khác trên cơ sở dữ liệu của bạn bị khóa.
CREATE PROCEDURE kill_process_proc()
BEGIN
DECLARE kill_done int;
DECLARE EXIT HANDLER FOR NOT FOUND SET kill_done = 1;
BEGIN
DECLARE cursor_ID int;
DECLARE cursor_i CURSOR FOR
SELECT
id
FROM information_schema.PROCESSLIST
WHERE USER LIKE ‘test%’
AND ID != CONNECTION_ID();
OPEN cursor_i;
read_loop:
LOOP
FETCH cursor_i INTO cursor_ID;
KILL CONNECTION cursor_ID;
IF kill_done THEN
LEAVE read_loop;
END IF;
END LOOP;
CLOSE cursor_i;
END;
END$
DELIMITER ;[/code]

Bạn cần gán giá trị cần thiết cho tham số người dùng. Trong ví dụ của chúng tôi, đó là ‘thử nghiệm%.

2. Tiếp theo, sẵn sàng quy trình, bạn có thể tạo một sự kiện để gọi nó và thực hiện nó theo lịch trình. Xin vui lòng, hãy xem xét tập lệnh sau: [Code Lang = Hồi SQL,] Tạo DEFINER = 'root'@'LocalHost'event Sakila.Kill_Process_Eventon Lịch trình mỗi' 1 'Daystarts' 2019-03-19 14: 53: 00'Dobegincall Kill_Process_Process );CHẤM DỨT;
[code lang=”SQL”]CREATE DEFINER = ‘root’@’localhost’
EVENT sakila.kill_process_event
ON SCHEDULE EVERY ‘1’ DAY
STARTS ‘2019-03-19 14:53:00’
DO
BEGIN
CALL kill_process_proc();
END;

Thay đổi sự kiện sakila.kill_process_eventenable; [/code]
ENABLE;[/code]

3. Các bước tiếp theo

• Gán các giá trị của riêng bạn cho các tham số cần thiết. Cụ thể, lịch trình, thời gian, cơ sở dữ liệu và đăng nhập người dùng
• Schedule the event
• Set the server variable event_scheduler = ON

Sau khi thực hiện các bước trước, tất cả các kết nối với đăng nhập người dùng (‘kiểm tra%,) sẽ bị giết.

Phương pháp 2. Tạo tệp BAT để khởi chạy máy khách MySQL và quy trình với các tham số

Bạn cũng có thể tạo một tệp BAT có thể thực thi để khởi chạy máy khách MySQL và quy trình với các tham số thông qua giao diện dòng lệnh. Trước, bạn cần tạo một quy trình với các tham số. Để làm điều này, vui lòng sử dụng tập lệnh sau:
First, you need to create a procedure with parameters. To do this, please use the following script:

. ID! Trên cơ sở dữ liệu. & NBSP; Chúng ta hãy xem nó với sự trợ giúp của DBForge Studio cho MySQL.
CREATE PROCEDURE kill_process_param(IN user VARCHAR(255))
BEGIN
DECLARE kill_done int;
DECLARE EXIT HANDLER FOR NOT FOUND SET kill_done = 1;
BEGIN
DECLARE cursor_ID int;
DECLARE cursor_i CURSOR FOR
SELECT
id
FROM information_schema.PROCESSLIST
WHERE USER LIKE user
AND ID != CONNECTION_ID();
OPEN cursor_i;
read_loop:
LOOP
FETCH cursor_i INTO cursor_ID;
KILL CONNECTION cursor_ID;
IF kill_done THEN
LEAVE read_loop;
END IF;
END LOOP;
CLOSE cursor_i;
END;
END$
DELIMITER ;[/code]
The corresponding procedure will appear on the database. Let’s have a look at it with the help of dbForge Studio for MySQL.

Tiếp theo, bạn cần tạo một tập tin Bat.

Để tạo một tập tin Bat: 1. Mở một trình soạn thảo văn bản đơn giản như Notepad.2. Nhập mã sau:
1. Open a plain text editor such as Notepad.
2. Type in the following code:

"C:\Program Files\MySQL\MySQL Server 8.0\bin\mysql.exe" --user= --password= --host= --port= --database= --execute="CALL kill_process_param('%1')"

3. Gán các giá trị của riêng bạn cho các tham số của người dùng, mật khẩu, máy chủ, cổng và cơ sở dữ liệu.

4. Lưu tệp với phần mở rộng .bat.

Bây giờ, bạn cần chạy tệp dơi với tham số.

Tất cả các kết nối với đăng nhập người dùng (‘kiểm tra%,) sẽ bị giết.

Sự kết luận

Biết cách tiêu diệt một quy trình trong máy chủ MySQL có thể là một công cụ hữu ích để có trong hộp công cụ của bạn. Tuy nhiên, chúng tôi khuyên bạn nên sử dụng các phương pháp đã cho một cách tiết kiệm.

  • Tác giả
  • Bài viết gần đây

Kill Connection, MySQL, MySQL hiển thị các truy vấn chạy dài, studio cho mysql