Você também pode reiniciar o mysqld, por exemplo,sudo service mysqld restart
philfreo 4/11
Respostas:
108
Você precisa matá-los um por um, o MySQL não possui nenhum comando massivo de matança. Você pode criar um script em qualquer idioma; por exemplo, no PHP, você pode usar algo como:
$result = mysql_query("SHOW FULL PROCESSLIST");while($row=mysql_fetch_array($result)){$process_id=$row["Id"];if($row["Time"]>200){$sql="KILL $process_id";
mysql_query($sql);}}
Se você não deseja armazenar em um arquivo, armazene variable
Basta executar no seu prompt de comando
> out1=$(mysql -B test -uroot -proot --disable-column-names -e "select concat('KILL ',id,';') from information_schema.processlist where user='root' and time > 200;")> out2=$(mysql -B test -uroot -proot --disable-column-names -e "$out1")
essa é uma péssima idéia ... em especial se você tiver o mecanismo de tabela configurado na memória, pois todos os dados serão perdidos ... ou se você usar o tipo de mecanismo innodb, pois ele refará todos os índices na reinicialização
HellBaby
8
Também ele mata todos os processos em todos os bancos de dados
Diego Andrés Díaz Espinoza
10
Não fica mais simples do que isso, basta executar isso no prompt do mysql.
killUSER username;
Ele matará todo o processo sob o nome de usuário fornecido. porque a maioria das pessoas usa o mesmo usuário para todos os fins, funciona!
Eu testei isso no MariaDB não tenho certeza sobre o mysql.
Em qual versão do MySQL isso existe? Não o vejo documentado na referência do MySQL 5.7 ; não há nenhuma evidência de que é possível matar pelo usuário: KILL [CONNECTION | QUERY] processlist_id. Eu tentei sua consulta no MySQL 5.6.34 e é considerado um erro de sintaxe.
22417 Birchlabs
4
Eu tentei isso no prompt do MySQL 5.6.34: mysql> kill user root; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'root' at line 1 Provavelmente sua resposta é um recurso específico apenas para o MariaDB.
Birchlabs
Isso não funciona para o Mysql. Por favor, leia antes de aconselhamento postagem relacionadas com outros sistemas de banco de dados ...
RyanH
7
A seguir, será criado um procedimento armazenado simples que usa um cursor para eliminar todos os processos, um por um, exceto o processo atualmente sendo usado:
DROPPROCEDUREIFEXISTS kill_other_processes;
DELIMITER $$CREATEPROCEDURE kill_other_processes()BEGINDECLARE finished INT DEFAULT0;DECLARE proc_id INT;DECLARE proc_id_cursor CURSORFORSELECT id FROM information_schema.processlist;DECLARECONTINUE HANDLER FORNOT FOUND SET finished =1;OPEN proc_id_cursor;
proc_id_cursor_loop: LOOP
FETCH proc_id_cursor INTO proc_id;IF finished =1THEN
LEAVE proc_id_cursor_loop;ENDIF;IF proc_id <> CONNECTION_ID()THENKILL proc_id;ENDIF;END LOOP proc_id_cursor_loop;CLOSE proc_id_cursor;END$$
DELIMITER ;
Pode ser executado com SELECTs para mostrar os processos antes e depois da seguinte maneira:
Recentemente, eu precisava fazer isso e eu vim com isso
-- GROUP_CONCAT turns all the rows into 1-- @q:= stores all the kill commands to a variableselect@q:=GROUP_CONCAT(CONCAT('KILL ',ID) SEPARATOR ';')FROM information_schema.processlist
-- If you don't need it, you can remove the WHERE command altogetherWHEREuser='user';-- Creates statement and execute it
PREPARE stmt FROM@q;EXECUTE stmt;DEALLOCATE PREPARE stmt;
Dessa forma, você não precisa armazenar no arquivo e executar todas as consultas com um único comando.
ETAPA 2: Chame o procedimento armazenado, fornecendo o nome de um usuário do banco de dados cujos processos você deseja eliminar. Você pode reescrever o procedimento armazenado para filtrar em alguns outros critérios, se desejar.
Olá. Não tenho certeza se você é um bot, uma comunidade ou um ser humano, mas de qualquer maneira, seria ótimo se você adicionasse algumas palavras explicando o que está acontecendo com essa linha de código e como isso resolve o problema em questão?
Félix Gagnon-Grenier
1
Adicionados -u e -p para dar acesso ao usuário ... funciona bem!
Lord St John
2
Podemos fazer isso pelo MySQL Workbench. Apenas execute isto:
Parece uma resposta melhor, pois não havia o idioma mencionado acima.
DeshDeep Singh
0
Uma maneira fácil seria reiniciar o servidor mysql. Abra "services.msc" no Windows Run, selecione Mysql na lista. Clique com o botão direito e pare o serviço. Em seguida, inicie novamente e todos os processos teriam sido eliminados, exceto aquele (a conexão reservada padrão)
Consulta 1, selecione concat ('KILL', id, ';') em information_schema.processlist em que user = 'nome de usuário' entra no arquivo de saída '/tmp/a.txt';
Origem da consulta 2 a.txt
Isso permitirá que você elimine todas as consultas no show processlist por usuário específico.
sudo service mysqld restart
Respostas:
Você precisa matá-los um por um, o MySQL não possui nenhum comando massivo de matança. Você pode criar um script em qualquer idioma; por exemplo, no PHP, você pode usar algo como:
fonte
for i in {994..1145}; do mysql -uroot -p123456 -e "kill $i" ; done
A operação de matar em massa economiza tempo. Faça no MySql:
Execute estes comandos
Referência
Se você não deseja armazenar em um arquivo, armazene
variable
Basta executar no seu prompt de comando
fonte
Eu também procurei como analisar através do MySQL o comando SHOW PROCESSLIST e terminei com uma linha em um shell:
Você pode executar grep antes do comando awk para filtrar um nome de banco de dados específico.
fonte
Ou ... com casca ...
Sim, eu sei, sou preguiçoso, mas também pode ser útil.
fonte
Não fica mais simples do que isso, basta executar isso no prompt do mysql.
Ele matará todo o processo sob o nome de usuário fornecido. porque a maioria das pessoas usa o mesmo usuário para todos os fins, funciona!
Eu testei isso no MariaDB não tenho certeza sobre o mysql.
fonte
KILL [CONNECTION | QUERY] processlist_id
. Eu tentei sua consulta no MySQL 5.6.34 e é considerado um erro de sintaxe.mysql> kill user root; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'root' at line 1
Provavelmente sua resposta é um recurso específico apenas para o MariaDB.A seguir, será criado um procedimento armazenado simples que usa um cursor para eliminar todos os processos, um por um, exceto o processo atualmente sendo usado:
Pode ser executado com
SELECT
s para mostrar os processos antes e depois da seguinte maneira:fonte
Recentemente, eu precisava fazer isso e eu vim com isso
Dessa forma, você não precisa armazenar no arquivo e executar todas as consultas com um único comando.
fonte
MATAR TODAS AS CONSULTAS SELECIONADAS
fonte
Se você não possui information_schema:
fonte
faça o login no Mysql como administrador:
E então execute o comando:
Você receberá algo como abaixo:
Você verá detalhes completos de diferentes conexões. Agora você pode matar a conexão adormecida como abaixo:
fonte
Este snippet funcionou para mim (servidor MySQL 5.5) para matar todos os processos do MySQL:
fonte
Eu combinaria bash e mysql:
fonte
Aqui está uma solução que você pode executar sem depender do sistema operacional:
PASSO 1: Crie um procedimento armazenado.
ETAPA 2: Chame o procedimento armazenado, fornecendo o nome de um usuário do banco de dados cujos processos você deseja eliminar. Você pode reescrever o procedimento armazenado para filtrar em alguns outros critérios, se desejar.
LIGAR
kill_user_processes('devdba');
fonte
fonte
Podemos fazer isso pelo MySQL Workbench. Apenas execute isto:
Exemplo:
Isso irá removê-lo.
fonte
Uma maneira fácil seria reiniciar o servidor mysql. Abra "services.msc" no Windows Run, selecione Mysql na lista. Clique com o botão direito e pare o serviço. Em seguida, inicie novamente e todos os processos teriam sido eliminados, exceto aquele (a conexão reservada padrão)
fonte
fonte
Às vezes, tenho alguns processos mysql de zumbis que não podem ser mortos (usando o MAMP Pro).
Primeiro obtenha uma lista de todos os processos mysql:
Em seguida, mate todos eles com (substitua processId pela primeira coluna no resultado do comando anterior):
fonte
O seguinte funcionou muito bem para mim:
fonte
Eu usei o comando
flush tables
para matar todas as conexões inativas que, na verdade, eram o problema de massa.fonte
para linguagem python, você pode fazer assim
fonte
Se você estiver usando laravel, então é para você:
Obviamente, você deve usar isso
use Illuminate\Support\Facades\DB;
após o seu espaço para nome.fonte
Consulta 1, selecione concat ('KILL', id, ';') em information_schema.processlist em que user = 'nome de usuário' entra no arquivo de saída '/tmp/a.txt';
Origem da consulta 2 a.txt
Isso permitirá que você elimine todas as consultas no show processlist por usuário específico.
fonte