Hướng dẫn mysql kill process - quá trình giết 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).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 dung chính ShowShow

  • 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ự kết luận

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ự kết luận

Nội phân chínhlimit 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.

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.SUPER privilege. Unless your offending process is for some reason using a username with that privilege...

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.

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ự kết luận
ENABLE
$

Nội phân chính
Next steps

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.
• Schedule the Event
• Set the server variable event_scheduler = ON

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.
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()BEGINDECLARE kill_done int;DECLARE EXIT HANDLER FOR NOT FOUND SET kill_done = 1;BEGINDECLARE cursor_ID int;DECLARE cursor_i CURSOR FORSELECTidFROM information_schema.PROCESSLISTWHERE USER LIKE ‘test%’AND ID != CONNECTION_ID();OPEN cursor_i;read_loop:LOOPFETCH cursor_i INTO cursor_ID;KILL CONNECTION cursor_ID;IF kill_done THENLEAVE read_loop;END IF;END LOOP;CLOSE cursor_i;END;END$DELIMITER ;[/code]
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_eventON SCHEDULE EVERY ‘1’ DAYSTARTS ‘2019-03-19 14:53:00’DOBEGINCALL kill_process_proc();END;
[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]
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
• 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ố

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.
First, you need to create a procedure with parameters. To do this, please use the following script:

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()BEGINDECLARE kill_done int;DECLARE EXIT HANDLER FOR NOT FOUND SET kill_done = 1;BEGINDECLARE cursor_ID int;DECLARE cursor_i CURSOR FORSELECTidFROM information_schema.PROCESSLISTWHERE USER LIKE ‘test%’AND ID != CONNECTION_ID();OPEN cursor_i;read_loop:LOOPFETCH cursor_i INTO cursor_ID;KILL CONNECTION cursor_ID;IF kill_done THENLEAVE read_loop;END IF;END LOOP;CLOSE cursor_i;END;END$DELIMITER ;[/code]
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.

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_eventON SCHEDULE EVERY ‘1’ DAYSTARTS ‘2019-03-19 14:53:00’DOBEGINCALL kill_process_proc();END;
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')"

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

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