Быстрый обзор продукта компании, над которым я работаю, прежде чем задать свой вопрос:
У нас есть сервер с установленной стандартной версией Ubuntu 18.04 и приложением Vision. Основное назначение сервера - запуск приложения Vision. Приложение Vision записывает данные в базу данных MySQL (установка MySQL тоже довольно стандартная). У нас также есть веб-сайт, который, по сути, является интерфейсом для базы данных. Если служба mysql systemd перестает работать и не перезапускается автоматически, приложение Vision выйдет из строя и не сможет перезапуститься до тех пор, пока MySQL снова не будет запущен вручную, что абсолютно неприемлемо (приложение Vision должно работать 24 часа в сутки с не более время от времени несколько секунд простоя).
Чтобы защитить сети наших клиентов, наши серверы находятся в изолированных локальных сетях, у которых нет доступа в Интернет.
В последнее время происходит сбой службы mysql systemd и не перезапускается. Я сделал это сообщение:
Расположение mysql.service на сервере Ubuntu 18.04?
что привело к следующему:
cd /etc/systemd/system
sudo mkdir mysql.service.d
cd mysql.service.d
sudo nano override.conf
Затем я ввел следующее для override.conf:
[Service]
Restart=always
Это не решило проблему, то есть MySQL дает сбой и не перезапускается через 5-20 часов работы. Я проверил использование оперативной памяти и жесткого диска во время сбоя MySQL, и оба они существенно ниже 75%, так что это тоже не проблема.
Некоторый поиск в Google и просмотр /var/log
привел меня к /var/log/unattended-upgrades
. Самая последняя авария произошла около 6:28 утра 3 января 2019 года.
cd /var/log/unattended-upgrades
cat unattended-upgrades.log
вывод:
(some stuff omitted)
2019-01-02 15:43:33,230 INFO Starting unattended upgrades script
2019-01-02 15:43:33,230 INFO Allowed origins are: o=Ubuntu,a=bionic, o=Ubuntu,a=bionic-security, o=UbuntuESM,a=bionic
2019-01-03 06:28:00,499 INFO Initial blacklisted packages:
2019-01-03 06:28:00,534 INFO Initial whitelisted packages:
2019-01-03 06:28:00,534 INFO Starting unattended upgrades script
2019-01-03 06:28:00,534 INFO Allowed origins are: o=Ubuntu,a=bionic, o=Ubuntu,a=bionic-security, o=UbuntuESM,a=bionic
2019-01-03 06:28:02,248 INFO Removing unused kernel packages: linux-modules-extra-4.15.0-29-generic linux-image-4.15.0-29-generic linux-headers-4.15.0-29 linux-headers-4.15.0-29-generic linux-modules-4.15.0-29-generic
2019-01-03 06:28:36,159 ERROR Auto-removing the packages failed!
2019-01-03 06:28:36,159 ERROR Error message: installArchives() failed
2019-01-03 06:28:36,159 ERROR dpkg returned an error! See /var/log/unattended-upgrades/unattended-upgrades-dpkg.log for details
2019-01-03 06:28:36,561 INFO No packages found that can be upgraded unattended and no pending auto-removals
2019-01-03 07:13:21,059 INFO Initial blacklisted packages:
2019-01-03 07:13:21,137 INFO Initial whitelisted packages:
(some stuff omitted)
следующая команда:
cat unattended-upgrades-shutdown.log
вывод:
(some stuff omitted)
Log started: 2019-01-03 06:28:02
(Reading database ... 232457 files and directories currently installed.)
Removing linux-modules-extra-4.15.0-29-generic (4.15.0-29.31) ...
Setting up mysql-server-5.7 (5.7.24-0ubuntu0.18.04.1) ...
Checking if update is needed.
Checking server version.
Error occurred: The mysql.session exists but is not correctly configured. The mysql.session needs SELECT privileges in the performance_schema database and the mysql.db table and also SUPER privileges.
mysql_upgrade failed with exit status 5
dpkg: error processing package mysql-server-5.7 (--configure):
installed mysql-server-5.7 package post-installation script subprocess returned error exit status 1
Errors were encountered while processing:
mysql-server-5.7
Log ended: 2019-01-03 06:28:35
Я дальновидный человек, а не специалист по серверам / сетям, поэтому я бы не стал заявлять, что полностью разбираюсь в этих журналах, но кажется, что unattended-upgrades
пытается обновить MySQL и терпит неудачу из-за отсутствия прав root, что не имеет абсолютно никакого смысла, поскольку unattended-upgrades
потребуются права root, чтобы делать почти все, что он делает. Во всяком случае, после большего количества поисков в Google я обнаружил это:
cd /etc/apt/apt.conf.d
cat 20auto-upgrades
вывод:
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";
Итак, вот мои вопросы:
1) Судя по журналам выше, кажется вероятным, что unattended-upgrades
вызывает сбой службы MySQL? Если да, то почему?
2) Поскольку наш сервер не имеет подключения к Интернету, будет ли хорошей общей практикой отключать автоматические обновления?
3) Есть ли что-нибудь еще, что я должен проверить, что может вызвать сбой службы MySQL, а не автоматический перезапуск?
4) Почему добавили override.conf
с участием Restart=always
не заставлять MySQL автоматически перезагружаться? Когда я печатаю sudo systemctl start mysql.service
MySQL успешно перезапускается. Разве это не то, что Restart=always
линия должна делать автоматически? Есть ли другой способ ввести эту строку, чтобы она действительно работала?
5) Кто-нибудь еще испытал unattended-upgrades
вызывает сбой MySQL? Это известная проблема? Я не мог найти, чтобы кто-нибудь еще упоминал об этом в Google, что кажется странным.
6) У меня сложилось впечатление, что следующим шагом будет отключение автообновлений. Если это так, в 20auto-upgrades
я должен установить Update-Package-Lists
к 0
, Unattended-Upgrade
к 0
, или оба? Я не вижу причин оставлять обновление списков пакетов включенным, если автоматическое обновление отключено, поэтому я склоняюсь к тому, чтобы установить оба значения на 0, если кто-то не предложит иное.
После автоматического обновления сервера mysql у меня не было другого выхода, кроме как удалить и переустановить mysql-сервер и восстановить базы данных.
Примеры файлов журнала:
2019-01-24 06:19:16,643 INFO Initial whitelisted packages:
2019-01-24 06:19:16,644 INFO Starting unattended upgrades script
2019-01-24 06:19:16,644 INFO Allowed origins are: o=Ubuntu,a=cosmic, o=Ubuntu,a=cosmic-security, o=UbuntuESM,a=cosmic
2019-01-24 06:19:22,702 INFO Packages that will be upgraded: apt apt-utils libapt-inst2.0 libapt-pkg5.0 mysql-client-5.7 mysql-client-core-5.7 mysql-server mysql-server-5.7 mysql-server-core-5.7
2019-01-24 06:19:22,710 INFO Writing dpkg log to /var/log/unattended-upgrades/unattended-upgrades-dpkg.log
2019-01-24 06:22:03,228 ERROR Installing the upgrades failed!
2019-01-24 06:22:03,242 ERROR error message: installArchives() failed
2019-01-24 06:22:03,256 ERROR dpkg returned a error! See /var/log/unattended-upgrades/unattended-upgrades-dpkg.log for details
Log started: 2019-01-24 06:21:05
Preconfiguring packages ...
(Reading database ... 91129 files and directories currently installed.)
Preparing to unpack .../mysql-server-5.7_5.7.25-0ubuntu0.18.10.2_amd64.deb ...
Unpacking mysql-server-5.7 (5.7.25-0ubuntu0.18.10.2) over (5.7.24-0ubuntu0.18.10.1) ...
Preparing to unpack .../mysql-server-core-5.7_5.7.25-0ubuntu0.18.10.2_amd64.deb ...
Unpacking mysql-server-core-5.7 (5.7.25-0ubuntu0.18.10.2) over (5.7.24-0ubuntu0.18.10.1) ...
Setting up mysql-server-core-5.7 (5.7.25-0ubuntu0.18.10.2) ...
Processing triggers for systemd (239-7ubuntu10.6) ...
Processing triggers for man-db (2.8.4-2) ...
Setting up mysql-server-5.7 (5.7.25-0ubuntu0.18.10.2) ...
Checking if update is needed.
Checking server version.
Running queries to upgrade MySQL server.
mysql_upgrade: (non fatal) [ERROR] 1728: Cannot load from mysql.proc. The table is probably corrupted
mysql_upgrade: (non fatal) [ERROR] 1545: Failed to open mysql.event
mysql_upgrade: [ERROR] 1136: Column count doesn't match value count at row 1
mysql_upgrade failed with exit status 5
dpkg: error processing package mysql-server-5.7 (--configure):
installed mysql-server-5.7 package post-installation script subprocess returned error exit status 1
Errors were encountered while processing:
mysql-server-5.7
Log ended: 2019-01-24 06:22:02