由于 AppArmor,MySQL 无法启动?

Sup*_*mal 38 mysql apparmor 16.04

我正在尝试在 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)
Run Code Online (Sandbox Code Playgroud)

当尝试通过运行进行故障排除时,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
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

Pau*_*rth 33

您需要编辑 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,
Run Code Online (Sandbox Code Playgroud)

(注意第二行的斜杠。)

这样做之后,尝试启动 MySQL,如果出现更多错误,也添加这些文件并重试。

是我在别处对这个问题的回答。

  • 为什么需要手动编辑`apparmour` 设置来安装`mysql`,如果是这样,那就有问题了。 (6认同)
  • 之后也可能需要重新启动 apparmor:`sudo service apparmor restart` (4认同)
  • 我同意@乔治!这是与其他人共享相同问题的启动板报告:https://bugs.launchpad.net/ubuntu/+source/mysql-5.7/+bug/1610765(大多数评论者报告的日志消息与此处相同,尽管原始记者有不同的。) (3认同)
  • `/proc/*/status r` 不必要地打开。Apparmor 有当前 prid 的匹配器,所以你可以这样做:`@{PROC}/@{pid}/status r,` 如果你有 NUMA 支持,你可能还想通配符访问 `node*/meminfo` / 多个 CPU 暴露给机器。 (3认同)

ADD*_*DDB 6

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

echo "exit 0" >> /etc/init.d/mysql
dpkg --configure -a
Run Code Online (Sandbox Code Playgroud)

如果它没有帮助使用:

sudo apt-get purge mysql-server mysql-client mysql-common mysql-server-5.5
sudo apt-get install mysql-server
Run Code Online (Sandbox Code Playgroud)

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


小智 5

我用这个解决了这个问题:

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

添加以下行:

/data/ r,
/data/** rwk,
Run Code Online (Sandbox Code Playgroud)

重新加载apparmor服务

sudo service apparmor reload
Run Code Online (Sandbox Code Playgroud)