Как определить, почему MySQL перестает работать?
Недавно я обновил сервер Ubuntu до версии 16.04, и теперь MySQL внезапно останавливается через несколько часов. Он действует как бэкэнд для установки Wordpress. Моя версия MySQL сейчас:
mysql Ver 14.14 Distrib 5.5.54, for debian-linux-gnu (x86_64) using readline 6.3
Проверка who -b
показывает, что сервер не перезагружался в течение нескольких дней, так что это не проблема, если MySQL не запускается должным образом.
Журнал ] /var/log/mysql/error.log
пуст, как и все заархивированные.
Журнал /var/log/syslog.log
не показывает ничего необычного или ссылающегося на mysql.
У меня установлен пакет unattended-upgradedes
для автоматической установки обновлений безопасности, и журнал /var/log/unattended-upgrades/unattended-upgrades.log
показывает:
2017-03-22 07:00:32,459 INFO Packages that will be upgraded: libc-bin libc-dev-bin libc6 libc6-dev locales multiarch-support
2017-03-22 07:00:32,459 INFO Writing dpkg log to '/var/log/unattended-upgrades/unattended-upgrades-dpkg.log'
2017-03-22 07:00:38,595 INFO All upgrades installed
2017-03-22 07:00:39,846 ERROR No '/usr/bin/mail' or '/usr/sbin/sendmail',can not send mail. You probably want to install the 'mailx' package.
2017-03-22 07:00:39,846 WARNING Found /var/run/reboot-required, rebooting
указывает, что он установил некоторые обновления и запланировал перезагрузку, но еще не перезагрузился.
Как мне окончательно узнать, что привело к остановке или сбою MySQL?
Попробуйте найти что-нибудь, что может убить mysqld. Проверьте это сообщение в блоге о том, какие инструменты использовать. Auditctl сработал в одном случае, в котором я участвовал. https://www.percona.com/blog/2015/03/06/stopped-mysql-tracing-back-signals-sent-mysql/
Он может быть остановлен из-за OOM (вне киллера памяти). Короче говоря: когда память, включая подкачку, почти полностью заполнена, ядро Linux может убить некоторые требовательные процессы, чтобы снизить нагрузку на память.
Сообщает ли dmesg | grep -i oom
что-нибудь?
Во-первых, я бы включил ведение журнала, поскольку ваш журнал ошибок mysql пуст: https://dev.mysql.com/doc/refman/8.0/en/error-log.html
Добавьте это:
/etc/my.cnf # most common location
log-error=/var/log/mysqld.log
Кроме того, я бы не разрешал внешние подключения к порту 3306. Если вам нужно удаленный доступ к MySQL, вместо этого используйте туннель SSH.