遵循这篇文章中的说明关于如何在 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