由于AppArmor,MySQL无法启动?


30

我正在尝试在Kubuntu 16.04上安装mysql-server-5.7,但是遇到了麻烦。

sudo apt install mysql-server 给出以下输出。

Setting up mysql-server-5.7 (5.7.18-0ubuntu0.16.04.1) ...
Renaming removed key_buffer and myisam-recover options (if present)
Job for mysql.service failed because the control process exited with error code. See "systemctl status mysql.service" and "journalctl -xe" for details.
invoke-rc.d: initscript mysql, action "start" failed.
● mysql.service - MySQL Community Server
   Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
   Active: activating (auto-restart) (Result: exit-code) since ons 2017-05-17 09:48:39 CEST; 10ms ago
  Process: 13622 ExecStartPost=/usr/share/mysql/mysql-systemd-start post (code=exited, status=0/SUCCESS)
  Process: 13621 ExecStart=/usr/sbin/mysqld (code=exited, status=2)
  Process: 13612 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=0/SUCCESS)
 Main PID: 13621 (code=exited, status=2)

maj 17 09:48:39 anis systemd[1]: Failed to start MySQL Community Server.
maj 17 09:48:39 anis systemd[1]: mysql.service: Unit entered failed state.
maj 17 09:48:39 anis systemd[1]: mysql.service: Failed with result 'exit-code'.
dpkg: error processing package mysql-server-5.7 (--configure):
 subprocess installed post-installation script returned error exit status 1
dpkg: dependency problems prevent configuration of mysql-server:
 mysql-server depends on mysql-server-5.7; however:
  Package mysql-server-5.7 is not configured yet.

dpkg: error processing package mysql-server (--configure):
 dependency problems - leaving unconfigured
Errors were encountered while processing:
 mysql-server-5.7
 mysql-server
E: Sub-process /usr/bin/dpkg returned an error code (1)

当尝试通过运行进行故障排除时,journalctl -xe我得到如下输出,这似乎表明AppArmor给我带来了麻烦。

maj 17 09:53:14 anis systemd[1]: Starting MySQL Community Server...
-- Subject: Unit mysql.service has begun start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit mysql.service has begun starting up.
maj 17 09:53:14 anis audit[14767]: AVC apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/proc/14767/status" pid=14767 comm="mysqld" requested_mask="r" denied_mask="r" fsuid=124 ouid=124
maj 17 09:53:14 anis audit[14767]: AVC apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/sys/devices/system/node/" pid=14767 comm="mysqld" requested_mask="r" denied_mask="r" fsuid=124 ouid=0
maj 17 09:53:14 anis kernel: audit: type=1400 audit(1495007594.314:240): apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/proc/14767/status" pid=14767 comm="mysqld" requested_mask="r" denied_mask="r" fsuid=124 ouid=124
maj 17 09:53:14 anis kernel: audit: type=1400 audit(1495007594.314:241): apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/sys/devices/system/node/" pid=14767 comm="mysqld" requested_mask="r" denied_mask="r" fsuid=124 ouid=0
maj 17 09:53:14 anis kernel: audit: type=1400 audit(1495007594.314:242): apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/proc/14767/status" pid=14767 comm="mysqld" requested_mask="r" denied_mask="r" fsuid=124 ouid=124
maj 17 09:53:14 anis audit[14767]: AVC apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/proc/14767/status" pid=14767 comm="mysqld" requested_mask="r" denied_mask="r" fsuid=124 ouid=124
maj 17 09:53:14 anis audit[14767]: AVC apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/proc/14767/task/14767/mem" pid=14767 comm="mysqld" requested_mask="r" denied_mask="r" fsuid=124 ouid=124
maj 17 09:53:14 anis kernel: audit: type=1400 audit(1495007594.658:243): apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/proc/14767/task/14767/mem" pid=14767 comm="mysqld" requested_mask="r" denied_mask="r" fsuid=124 ouid=124
maj 17 09:53:14 anis systemd[1]: mysql.service: Main process exited, code=exited, status=2/INVALIDARGUMENT

我该如何解决这个问题?


6
未来的读者请注意:apparmor被拒绝的消息只是警告,MySQL可能出于其他原因退出-请参阅/var/log/mysql/error.log。即使MySQL无法访问上述/ proc和/ sys文件,它仍应能够运行。
SystemParadox

确保您的磁盘未满。
Buttle Butkus

Answers:


31

您需要编辑您的apparmor配置,以便MySQL访问那些文件。日志消息告诉你,/usr/sbin/mysqld需要阅读(r)访问开放/proc/14767/status/sys/devices/system/node/(斜线因为它要读取目录),和/proc/14767/task/14767/mem。要编辑的文件是/etc/apparmor.d/usr.sbin.mysqld

就我而言,我通过在中间的某处(每行前面有两个空格)添加这些行来解决了这个问题:

  /proc/*/status r,
  /sys/devices/system/node/ r,
  /sys/devices/system/node/node0/meminfo r,

(请注意第二行的斜杠。)

之后,尝试启动MySQL,如果遇到更多错误,也添加这些文件,然后重试。

是我在其他地方对这个问题的回答。


6
为什么要apparmour手动编辑设置以进行安装mysql,如果真是这样,那就是一个问题。
乔治·乌多森

2
我同意@乔治!这是一个启动板报告,其他共享相同问题的报告:bugs.launchpad.net/ubuntu/+source/mysql-5.7/+bug/1610765(大多数注释者报告的日志消息与此处相同,尽管原始报告者的日志消息有所不同。 )
Paul A Jungwirth,2017年

3
/proc/*/status r是不必要的打开。Apparmor具有用于当前分支的匹配器,因此您可以这样操作: 如果您有NUMA支持/机器上有多个CPU @{PROC}/@{pid}/status r,node*/meminfo则可能还想通配访问。
马丁·福特

3
之后,可能还需要重新启动apparmor: sudo service apparmor restart
Zbyszek

1
最好将其放入,/etc/apparmor.d/local/user.sbin/mysqld以避免与默认配置文件更新冲突。它已经包含在默认的配置文件
萨芬

6

可能是这样的:https//bugs.debian.org/cgi-bin/bugreport.cgi?bug = 739846, 所以请尝试使用

echo "exit 0" >> /etc/init.d/mysql
dpkg --configure -a

如果它不能帮助使用:

sudo apt-get purge mysql-server mysql-client mysql-common mysql-server-5.5
sudo apt-get install mysql-server

完全删除mysql并重新安装警告:如果您有任何数据库,它们将被删除。


谢谢你的建议!我的/etc/init.d/mysql已经exit 0结尾了。我尝试清除并重新安装mysql-server,但没有帮助。我只是尝试重新安装(而不清除)mysql-common,但这也没有帮助。清除它需要我卸载很多依赖它的软件包,我对此有些害怕。
超常

我只是sudo apt remove --purge mysql-*完全删除了所有MySQL内容(我的版本是5.7),然后做了sudo apt install akonadi-server mysql-client mysql-server,但是结果还是一样。我仍然收到相同的错误消息,并journalctl -xe指出如上所述的AppArmor问题。
超常

1

我以此解决了这个问题;

编辑/etc/apparmor.d/local/usr.sbin.mysqld

添加这些行;

/data/ r,
/data/** rwk,

重新装甲服务

#sudo service apparmor reload

0

在我的情况下,尝试使用上述答案后在Ubuntu 16.04上安装mysql-server-5.7的工作原理是:

  1. sudo apt install mysql-server
  2. 检查以上确切错误
  3. 重启
  4. sudo apt install mysql-server再次运行以继续安装

安装完成。


好的,但是不幸的是,这仍然对我不起作用。
超常

0
  1. stop mysql-server
  2. rm /var/lib/mysql/ib_logfile*
  3. restart mysql

1
{}对代码使用代码标记 ,这样会使代码更具可读性。您可以编辑答案。
罗伯特·里德尔

我重命名了ib_logfile*文件并执行了操作,apt upgrade但是当apt转到mysql时,我得到了以下输出 mysql_upgrade: [ERROR] 1812: Tablespace is missing for table mysql.plugin
Supernormal

太好了,我首先尝试对它进行压缩,mysql删除了tarball,现在由于其他原因而无法启动。Ubuntu 18.04。YMMV
Chaim Eliyah '18
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.