Como matar um processo no MySQL

Resumo : Neste tutorial, você aprenderá como encerrar um processo no MySQL usando a instrução KILL por meio da ferramenta cliente mysql e mysqladmin .

O MySQL cria um thread para cada conexão com o servidor mysqld. Você pode encerrar um thread (ou processo) com a KILLinstrução.

Observe que usaremos os termos processo e thread de forma intercambiável, mas eles são diferentes do ponto de vista técnico

Primeiro, encontre o thread IDusando a instrução SHOW PROCESSLIST :

SHOW PROCESSLIST;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Esta instrução retorna uma lista de processos em execução, cada um recebendo um ID.

Segundo, elimine um thread usando IDa KILLinstrução:

KILL id;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Para executar o KILLcomando, você precisa ter o CONNECTION_ADMINprivilégio.

Mate um processo usando o cliente mysql

Primeiro, abra o prompt de comando no Windows ou o Terminal em sistemas do tipo Unix.

Segundo, conecte-se ao servidor MySQL usando a ferramenta cliente mysql:

mysql -u root -pLinguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Terceiro, exiba todos os processos no servidor usando a SHOW PROCESSLISTinstrução:

SHOW PROCESSLIST;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Ele exibirá os threads em execução no momento:

+----+-----------------+-----------------+------+---------+--------+------------------------+------------------+
| Id | User            | Host            | db   | Command | Time   | State                  | Info             |
+----+-----------------+-----------------+------+---------+--------+------------------------+------------------+
|  5 | event_scheduler | localhost       | NULL | Daemon  | 134298 | Waiting on empty queue | NULL             |
| 50 | root            | localhost:63998 | NULL | Query   |      0 | init                   | show processlist |
| 52 | bob             | localhost:64014 | NULL | Sleep   |      6 |                        | NULL             |
+----+-----------------+-----------------+------+---------+--------+------------------------+------------------+
3 rows in set (0.00 sec)Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Neste exemplo, a saída mostra que o servidor MySQL local possui três threads. Para encerrar um thread, você precisa encontrar o IDprocesso e executar a KILLinstrução:

KILL id;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Por exemplo, você pode encerrar o processo com ID52 da seguinte maneira:

KILL 52;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Se você usar a bobconta de usuário para fazer uma consulta, verá a seguinte mensagem:

ERROR 2013 (HY000): Lost connection to MySQL server during query
No connection. Trying to reconnect...
Connection id:    54
Current database: *** NONE ***Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

A mensagem diz que a sessão bobfoi perdida e reconectada imediatamente.

Mate um processo usando a ferramenta mysqladmin

mysqladmin é uma ferramenta cliente que permite realizar tarefas administrativas de banco de dados. Para encerrar um processo usando mysqladmin, siga estas etapas:

Primeiro, mostre os processos usando o mysqladmin processlistcomando:

mysqladmin -u root -p processlist;

Ele exibirá uma lista de processos:

+----+-----------------+-----------------+----+---------+--------+------------------------+------------------+
| Id | User            | Host            | db | Command | Time   | State                  | Info             |
+----+-----------------+-----------------+----+---------+--------+------------------------+------------------+
| 5  | event_scheduler | localhost       |    | Daemon  | 140572 | Waiting on empty queue |                  |
| 53 | root            | localhost:64026 |    | Sleep   | 5589   |                        |                  |
| 54 | bob             | localhost:64051 |    | Sleep   | 6065   |                        |                  |
| 56 | root            | localhost:50039 |    | Query   | 0      | init                   | show processlist |
+----+-----------------+-----------------+----+---------+--------+------------------------+------------------+Linguagem de código:  PHP  ( php )

Segundo, elimine um processo por id usando o comando kill. Por exemplo:

mysqladmin -u root -p kill 54

Nos bastidores, o comando mysqladmin kill executa a KILLinstrução para encerrar um processo.

Mate todos os processos no MySQL

O MySQL não possui uma instrução que elimine todos os processos ou processos que pertencem a um usuário uma vez. Para fazer isso, você precisa trabalhar um pouco mais.

MySQL armazena a lista de processos na information_schema.processlisttabela. Portanto, você pode recuperar a lista de processos atuais com id da tabela information_schema.processlist.

Aqui está a processlisttabela:

DESC information_schema.processlist;Linguagem de código:  CSS  ( css )

Saída:

+---------+-----------------+------+-----+---------+-------+
| Field   | Type            | Null | Key | Default | Extra |
+---------+-----------------+------+-----+---------+-------+
| ID      | bigint unsigned | NO   |     |         |       |
| USER    | varchar(32)     | NO   |     |         |       |
| HOST    | varchar(261)    | NO   |     |         |       |
| DB      | varchar(64)     | YES  |     |         |       |
| COMMAND | varchar(16)     | NO   |     |         |       |
| TIME    | int             | NO   |     |         |       |
| STATE   | varchar(64)     | YES  |     |         |       |
| INFO    | varchar(65535)  | YES  |     |         |       |
+---------+-----------------+------+-----+---------+-------+
8 rows in set (0.04 sec)Linguagem de código:  PHP  ( php )

Primeiro, construa uma lista de KILLinstruções que eliminam os processos pertencentes à conta do usuário bob:

SELECT CONCAT('KILL ',id, ';') 
FROM information_schema.processlist 
WHERE user='bob';Linguagem de código:  JavaScript  ( javascript )

Saída:

+-------------------------+
| CONCAT('KILL ',id, ';') |
+-------------------------+
| KILL 59;                |
| KILL 61;                |
+-------------------------+
2 rows in set (0.00 sec)Linguagem de código:  JavaScript  ( javascript )

Segundo, encontre o local no servidor MySQL onde você pode armazenar um arquivo com segurança:

SELECT @@secure_file_priv;Linguagem de código:  CSS  ( css )

Ele mostrará algo como o seguinte no Windows:

+------------------------------------------------+
| @@secure_file_priv                             |
+------------------------------------------------+
| C:\ProgramData\MySQL\MySQL Server 8.0\Uploads\ |
+------------------------------------------------+
1 row in set (0.00 sec)Linguagem de código:  JavaScript  ( javascript )

Você precisa construir o nome do arquivo no diretório de arquivos seguro, como:

C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/kill.txtLinguagem de código:  JavaScript  ( javascript )

Observe que no Windows, você precisa substituir a barra invertida (\) pela barra invertida (/) no caminho do arquivo.

Terceiro, salve as KILLinstruções em um arquivo no MySQL:

SELECT CONCAT('KILL ',id, ';') 
FROM information_schema.processlist 
WHERE user='bob'
INTO OUTFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/kill.txt';Linguagem de código:  JavaScript  ( javascript )

Saída:

Query OK, 2 rows affected (0.01 sec)Linguagem de código:  CSS  ( css )

O kill.txtarquivo conterá as seguintes linhas:

KILL 59;
KILL 61;

Por fim, execute as KILLinstruções no kill.txtarquivo para encerrar os processos que pertencem à conta do usuário bob:

SOURCE C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/kill.txt;Linguagem de código:  JavaScript  ( javascript )

A instrução SOURCE executa todas as instruções SQL no arquivo kill.txt.

Resumo

  • Use a SHOW PROCESSLISTinstrução para exibir uma lista de threads e a KILLinstrução para encerrar um thread por um ID.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *