27 нояб. 2008 г.
отстреливаем Sleep подключения...
итак... иногда бывает ситуация (толи ошибка на сайте, толи малоли что).... вообщем много соединений со статусом Sleep пока идет поиск причины их нужно как-то удалять.
Перезагружать mysql - это не выход.
Задача - удалять соединения которые находятся в статусе Sleep.
кому читать некогда весь пост вот рецепт - sh скрипт:
----
#!/bin/bash
LOGIN=you_login
PASS=you_pass
/usr/bin/mysqladmin -u ${LOGIN} -p${PASS} kill `/usr/bin/mysql -u ${LOGIN} -p${PASS} -Ns -e "show processlist" | grep "Sleep" | awk '{print $1}' | xargs | tr " " ","`
----
теперь по порядку, кому интересно...
Первым делом нужно получить этот самый список процессов которые у нас работают (в клиенте набираем):
>show processlist;
получим список.... руками это делать не гламурно, будем это делать в консоле:
----
>/usr/bin/mysql -u ${LOGIN} -p${PASS} -Ns -e "show processlist"
----
-Ns убираем название столбцов и линии....
-e "и в скобках комманда которую нужно выполнить клиенту"
отфильтруем результат:
---
grep "Sleep"
---
впринципе можно фильтровать не только Sleep, а и по адресу, по базе ... фантазию включаем...
из всего этого вывода нам нужна только 1 колонка, там где номер процесса:
----
awk '{print $1}'
----
теперь у нас будет вывод в столбик, нам нужно в линию:
----
xargs
----
но еще нам нужно заменить пробел между номерами процессов на запятую:
----
tr " " ","
----
все... теперь мы имеем список всех нужных нам процессов в одну строчку, перечисленных через запятую.
и делаем это все в качестве параметра mysqladmin.
Подписаться на:
Сообщения (Atom)