У меня есть сервер, на котором запущен веб-сайт с серверной базой данных MySQL (точнее - 5.5.37-MariaDB, для debian-linux-gnu на x86_64).
Иногда он перестает принимать соединения, и скрипты веб-сайта сообщают, что «невозможно подключиться к серверу». После перезапуска сервера MySQL он некоторое время работает нормально (до нескольких дней).
syslog, mysql.error и dmesg не показывают связанных ошибок. Журнал медленных запросов, однако, показывает, что в какой-то момент запросы выполняются все медленнее и медленнее (начиная примерно с 1 секунды и заканчивая 70). После перезапуска MySQL те же запросы выполняются немедленно.
Как я могу это исправить или хотя бы определить причину проблемы?
Когда сервер зависает беги strace -fp <pid of mysql>
Это покажет, какая команда ждет. Вероятно, это будет чтение с номером
lsof -p <mysql pid>
отобразит, что это за число на самом деле.
Трудно сказать, не находясь на сервере, когда он ломается, если в логах больше нечего уйти
Включите ведение журнала медленных запросов в my.cnf, чтобы определить, где находятся ваши узкие места, и подумайте, если max_used_connections больше, чем max_connections.
SHOW GLOBAL VARIABLES LIKE 'max_connections';
SHOW GLOBAL STATUS LIKE 'max_used_connections';