Я ищу хорошо протестированный bash-скрипт (или альтернативное решение) для этого, чтобы избежать исчерпания max_connection. Я знаю, что это борется с симптомами, но действительно нужен такой сценарий, как краткосрочное решение.
linux
mysql
query
kill-process
alfish
источник
источник
Ответы:
проверьте команду pt-kill из набора инструментов Percona .
и ... начните контролировать свою систему - munin , cacti с лучшими шаблонами cacti для mysql , что угодно, чтобы вы поняли, что происходит. регистрация медленных запросов mysql также будет хорошей идеей.
источник
Если у вас есть MySQL 5.1, где список процессов находится в INFORMATION_SCHEMA, вы можете сделать это для генерации массовых команд KILL QUERY из клиента mysql для запроса, выполняющегося более 20 минут (1200 секунд):
Вы можете использовать предложения WHERE для поля INFO, чтобы искать конкретный запрос, поле TIME для длительных запросов или поле DB для конкретной базы данных.
Если вы являетесь пользователем root @ localhost, у вас должны быть полные привилегии для выполнения этого следующим образом
Вы можете crontab это следующим образом:
Вот еще один вариант:
Кстати, вам не нужно указывать myDB, так как я явно прочитал из information_schema.processlist как полное имя таблицы.
Вот демонстрация того, что вы должны увидеть. В этом примере я выведу команду KILL для всех процессов, время которых> 20000 секунд:
Я делаю эту технику в течение последних 5 лет. Фактически, я представил этот ответ в DBA StackExchange в прошлом году, и он был принят .
источник
Я нашел следующий фрагмент кода здесь :
Обновление 2013-01-14: был анонимный намек на то, что это потенциально опасно и может привести к остановке процессов репликации. Так что используйте на свой страх и риск:
источник
В MySQL 5.7 и далее вы можете использовать переменную max_execution_time, чтобы сделать это автоматически для всех запросов чтения SELECT.
источник
Я не стал бы пробовать решения bash, если вам нравится uptime!
Если у вас есть доступ к коду, вы можете установить максимальное время выполнения операторов SELECT, используя метод, описанный здесь :
В противном случае на сервере:
/programming/415905/how-to-set-a-maximum-execution-time-for-a-mysql-query
Установите pt-kill:
Сделайте снимок вашего списка процессов:
Проверьте pt-kill на снимке:
Убедитесь, что правила матча соответствуют вашему случаю. Это выше убьет все операторы Execute за 45 секунд. Если вы уверены, измените и выполните эту команду, чтобы выполнить инструкцию с интервалом в 10 секунд:
источник