После выполнения инструкций в этом посте о том, как установить MySQL 5.6 поверх существующей установки 5.7 в Ubuntu 16.04, у меня возникли многочисленные проблемы с запуском сервиса.
Сначала это произошло:
Failed to start mysql.service: Unit mysql.service is masked
, который был решен путем запуска systemctl unmask mysql.service
. Однако тогда я неоднократно получал это сообщение:
Job for mysql.service failed because the control process exited with error code. See "systemctl status mysql.service" and "journalctl -xe" for details.
Проверка systemctl status mysql.service
показала:
Failed to start LSB: Start and stop the mysql database server daemon.
Исправление для этого состояло из нескольких шагов, включая различные журналы отладки и затем следуя подсказкам в этих журналах. Я документирую их, чтобы помочь другим - ваши проблемы могут отличаться, но этот процесс должен помочь выяснить, в чем дело:
Во-первых, journalctl -xe
содержит гораздо больше информации. В моем случае он содержал:
kernel: audit: type=1400 audit(1528794958.103:169): apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/etc/mysql/my.cnf.fallback"
Это можно исправить с помощью vi /etc/apparmor.d/usr.sbin.mysqld
и добавив строки для:
/etc/mysql/conf.d/mysql.cnf/ r,
/etc/mysql/conf.d/mysql.cnf/* r,
/etc/mysql/my.cnf.fallback r,
Интересным моментом является то, что ему нужна отдельная строка для каталога и подстановочные файлы внутри него - это может быть общим для некоторых приложений Unix, но не все, что может сбить вас с толку.
Как только все изменения в оборудовании были выполнены, система все равно не запустилась, и на этот раз команда journalctl -xe
не принесла ничего полезного.
Затем я смог запустить sudo -u mysql mysqld
, чтобы попытаться запустить демон вручную. Это показало ошибку при запуске InnoDB, но не почему.
По какой-то причине я удалил файлы /var/lib/mysql/ib_logfile*
и ib_binlog
и попытался снова; на этот раз сервер запустился. Затем я смог прекратить это и запустить service start mysql
, который работал.
Отдельно я удалил /var/lib/mysql/debian-5.7.flag
- я не уверен, помогло ли это или вызвало бы последующие проблемы, если бы я этого не сделал.
Надеюсь, этот пример кому-нибудь поможет; пожалуйста, не стесняйтесь добавлять другие ответы в той же строке, если вы столкнулись с различными проблемами в этом процессе.
Сначала остановите mysql, если он работает
BACKUP=/var/tmp/broken-mysql
sudo mkdir -p $BACKUP # create backup dir
sudo mv -vi /var/lib/mysql* $BACKUP # Remove any old database setup
sudo mysql_install_db -u mysql # Install new database
sudo systemctl unmask mysql.service # Enables the service for systemd
sudo service mysql start # Start the service
После версии MySQL Downgrading я также сталкиваюсь с этой попыткой после команды
systemctl unmask mysql.service
service mysql start