无法在 Ubuntu 16.04 上启动 MySQL 5.6 的 mysql.service

无法在 Ubuntu 16.04 上启动 MySQL 5.6 的 mysql.service

遵循这篇文章中的说明关于如何在 Ubuntu 16.04 上在现有的 5.7 安装上安装 MySQL 5.6,我在启动服务时遇到了多个问题。

首先发生了这样的事情:

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.

答案1

降级 MySQL 版本后,我也遇到了这个问题,请尝试以下命令

systemctl unmask mysql.service
service mysql start

答案2

修复此问题包含多个步骤,包括不同的调试日志,然后跟踪这些日志中的线索。我记录下来是为了帮​​助其他人 - 你的问题可能不同,但这个过程应该有助于发现问题所在:

首先,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 应用程序来说很常见,但并非所有应用程序都如此,因此可能会让您绊倒。

一旦完成了所有的 apparmor 更改,系统仍然无法启动,并且这次journalctl -xe命令没有产生任何有用的结果。

然后我就可以sudo -u mysql mysqld尝试手动启动守护进程了。结果显示 InnoDB 启动失败,但没有说明原因。

一时兴起,我删除了文件/var/lib/mysql/ib_logfile*ib_binlog然后重试;这次服务器启动了。然后我能够终止它并运行,service start mysql结果成功了。

另外,我删除了/var/lib/mysql/debian-5.7.flag- 我不确定这是否有帮助,或者如果我不这样做是否会导致后续问题。

希望这个例子能够帮助到某些人;如果您在此过程中遇到不同的问题,请随意添加类似的其他答案。

答案3

如果 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

相关内容