Мы используем MySQL 5.1.33 на FreeBSD 7.2-RELEASE.
Это сервер базы данных разработки, подключенный к веб-серверу разработки, на котором запущен Серебряная полоса и PHP 5.3.
Сегодня утром веб-сервер разработки жаловался, что не может подключиться к серверу базы данных. Ошибка PHP: «Не удается подключиться к серверу MySQL на 'host.example.gov'».
Мы обнаружили, что на сервере базы данных есть тысячи открытых файлов, что также необычно, учитывая, что этот сервер в основном простаивает.
# lsof |grep /var/db/mysql/DATABASE |wc -l
5135
Есть также тысячи подключений в состоянии TIME_WAIT, что необычно. Я ожидаю, что эти соединения TIME_WAIT истекут по тайм-ауту, но они не завершились за последние 20 минут.
# netstat -an | grep 3306 | grep -c TIME_WAIT
2650
На сервере базы данных не происходит большой активности:
# mysql -e "show full processlist;"
+------+------+-----------+------+---------+------+-------+-----------------------+
| Id | User | Host | db | Command | Time | State | Info |
+------+------+-----------+------+---------+------+-------+-----------------------+
| 2489 | root | localhost | NULL | Query | 0 | NULL | show full processlist |
+------+------+-----------+------+---------+------+-------+-----------------------+
Мой вопрос: как я могу узнать из MySQL, что хранится в этих файлах? Может быть, открытые файлы - отвлекающий маневр.
Оказывается, эта проблема была вызвана неисправным брандмауэром localhost. Клиенты mysql могли подключиться изначально (или установить некоторые подключения), но последующие пакеты игнорировались.
Я все еще пытаюсь разобраться с открытыми файлами, но эта проблема исчезла.