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 KILL
instruçã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 ID
usando 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 ID
a KILL
instrução:
KILL id;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Para executar o KILL
comando, você precisa ter o CONNECTION_ADMIN
privilé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 -p
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Terceiro, exiba todos os processos no servidor usando a SHOW
PROCESSLIST
instruçã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 ID
processo e executar a KILL
instrução:
KILL id;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Por exemplo, você pode encerrar o processo com ID
52 da seguinte maneira:
KILL 52;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Se você usar a bob
conta 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 bob
foi 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 processlist
comando:
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 KILL
instruçã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.processlist
tabela. Portanto, você pode recuperar a lista de processos atuais com id da tabela information_schema.processlist.
Aqui está a processlist
tabela:
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 KILL
instruçõ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.txt
Linguagem 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 KILL
instruçõ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.txt
arquivo conterá as seguintes linhas:
KILL 59;
KILL 61;
Por fim, execute as KILL
instruções no kill.txt
arquivo 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
PROCESSLIST
instrução para exibir uma lista de threads e aKILL
instrução para encerrar um thread por um ID.