Estou procurando um script bash bem testado (ou solução alternativa) para fazer isso, a fim de evitar que max_connection se esgote. Eu sei que ele está combatendo os sintomas, mas realmente precisa de um script como uma solução de curto prazo.
linux
mysql
query
kill-process
alfish
fonte
fonte
Respostas:
confira o comando pt-kill do kit de ferramentas percona .
e .. comece a monitorar seu sistema - munin , cactos com melhores modelos de cactos para mysql , qualquer coisa para que você tenha uma idéia do que está acontecendo. registrar consultas lentas do mysql também será uma boa idéia.
fonte
Se você possui o MySQL 5.1 onde a lista de processos está no arquivo Information_SCHEMA, você pode fazer isso para gerar os comandos KILL QUERY em massa a partir do cliente mysql para consultas em execução por mais de 20 minutos (1200 segundos):
Você pode fazer cláusulas WHERE no campo INFO para procurar uma consulta específica, o campo TIME em consultas demoradas ou o campo DB em um banco de dados específico.
Se você é root @ localhost, deve ter privilégios totais para executar isso da seguinte maneira
Você pode criar isso da seguinte maneira:
Aqui está outra variação:
BTW Você não especificou um myDB desde que eu expliquei a leitura de information_schema.processlist como um nome de tabela totalmente qualificado.
Aqui está uma demonstração do que você deve ver. Neste exemplo, ecoarei o comando KILL de todos os processos cujo tempo> 20000 segundos:
Eu tenho feito essa técnica nos últimos 5 anos. De fato, enviei essa resposta ao DBA StackExchange no ano passado e ela foi aceita .
fonte
Encontrei o seguinte código cortado aqui :
Atualização 2013-01-14: Houve uma dica anônima de que isso é potencialmente perigoso e pode também matar processos de replicação. Portanto, use por sua conta e risco:
fonte
No MySQL 5.7 em diante, você pode usar a variável max_execution_time para fazer isso automaticamente em todas as consultas de leitura "SELECT".
fonte
Eu não tentaria soluções bash se você gostaria de tempo de atividade!
Se você tiver acesso ao código, poderá realmente definir o tempo máximo de execução nas instruções SELECT usando o método descrito aqui :
Caso contrário, no servidor:
/programming/415905/how-to-set-a-maximum-execution-time-for-a-mysql-query
Instale pt-kill:
Tire uma foto da sua lista de processos:
Teste pt-kill no instantâneo:
Verifique se as regras de correspondência se adequam ao seu caso. Os itens acima eliminarão todas as instruções Execute por 45 segundos. Depois de ter certeza, modifique e execute este comando para executar a instrução em um intervalo de 10 segundos:
fonte