Назад | Перейти на главную страницу

MySQL перестает принимать соединения более 3306, но все еще работает на localhost

У меня есть база данных MySQL, которая вообще перестала принимать соединения с моего веб-сервера. Итак, я подключился к серверу по SSH и начал проверять его жизненно важные показатели. На жестких дисках было много свободного места, и было много доступной памяти и места для подкачки. Ничего не съедало CPU (почти 100% простоя). Я даже подключился к MySQL локально и без проблем выполнил несколько запросов. Но SHOW PROCESSLIST показывал только мое собственное соединение, никаких других.

Хуже всего то, что в журнале MySQL нет ошибок, даже отдаленно совпадающих с недоступностью сервера.

На веб-сервере я получил сообщение об ошибке «Потеряно соединение с сервером MySQL во время запроса» в момент начала недоступности, за которым следовала группа ошибок «Сервер MySQL ушел».

На сервере есть только одно другое приложение, которое принимает сетевые подключения, и я убил его (на случай, если у него было слишком много открытых подключений или что-то в этом роде), но это не помогло.

Наконец, я просто перезапустил процесс MySQL, и все (пока) снова работает.

Что еще я должен проверить в этих обстоятельствах? Есть идеи, в чем может быть проблема? И как я могу убедиться, что проблема именно в этом?

Как указано выше, убедитесь, что в iptables нет изменений, которые блокируют 3306. Также убедитесь, что ваш /etc/my.cnf не был перезаписан, возможно, из-за обновления пакета распространения. Вы НЕ должны видеть директиву skip-network в [mysqld]

Вы должны lsof или netstat проверить, прослушивает ли процесс порт 3306 на правильном интерфейсе (привязан ли он только к 127.0.0.1 или привязан к ip хоста или *). Вы также должны проверить, сколько файлов было открыто в процессе (возможно, у вас установлен ulimit). Вы также должны убедиться, что в ваших правилах iptables ничего не изменилось, чтобы вызвать его блокировку (хотя, если вы не используете некоторые расширенные модули, перерисовка не помогла бы). Также убедитесь, что вы не используете что-то, что может обновлять ваши правила оболочек tcp, например запретить хосты (проверьте /etc/hosts.* - хотя, опять же, это вряд ли будет исправлено перезапуском). В следующий раз, когда это произойдет, запустите wirehark как на вашем сервере myswl, так и на сервере приложений и выполните фильтрацию на порту 3306, пока вы пытаетесь подключиться к mysql по сети.