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.