我正在使用 Ubuntu 20.04(Focal Fossa),但自从我使用旧版 Ubuntu(19.04 和 19.10)以来,这个问题就一直存在。所以我有 2 个硬盘驱动器 - 一个是 SSD(小尺寸),另一个是 SATA(大尺寸)。我连接大 SATA 磁盘的原因是我必须托管一个大型 MySQL 数据库。
因此 SATA 硬盘已安装,/mnt/sata/
并且我创建了以下符号链接:
/var/lib/mysql -> /mnt/sata/mysql
我这样做是因为我不想更改 MySQL 和 AppArmor 的默认配置。但是当我尝试启动服务时mysql
,我收到以下错误apparmor
。
Apr 29 20:45:26 home kernel: [17678.024673] audit: type=1400 audit(1588189526.914:156): apparmor="DENIED" operation="mknod" profile="/usr/sbin/mysqld" name="/mnt/sata/mysql/mysqld_tmp_file_case_insensitive_test.lower-test" pid=58497 comm="mysqld" requested_mask="c" denied_mask="c" fsuid=125 ouid=125
因此,这意味着apparmor
阻止 MySQL 访问数据目录,/var/lib/mysql
然后将其符号链接到/mnt/sata/mysql
。如果我将以下规则添加到/etc/apparmor.d/usr.sbin.mysqld
,问题就消失了。
/usr/sbin/mysqld {
...
# Allow data dir access (existing)
/var/lib/mysql/ r,
/var/lib/mysql/** rwk,
# Allow symlinks as well (added for symlink)
/mnt/sata/mysql r,
/mnt/sata/mysql rwk,
...
}
如您所见,apparmor
MySQL 的配置文件已允许访问/var/lib/mysql
,在我的情况下,然后符号链接到/mnt/sata/mysql
。因此,它看起来像是apparmor
跟随符号链接并尝试查找符号链接目标的规则。
有什么解决方案可以让我启动 mysql 服务器,而不必将符号链接的访问规则添加到配置文件apparmor
?
谢谢!!!
答案1
使用绑定挂载而不是软链接:
mount -bind /mnt/sata/mysql /var/lib/mysql
你也可以把它/etc/fstab
/mnt/sata/mysql /var/lib/mysql none bind