无法创建/写入文件‘/mnt/temp/something’(错误代码:13)

无法创建/写入文件‘/mnt/temp/something’(错误代码:13)

我将 mysql 配置的 tmp 目录更改为已挂载磁盘,但service mysql restart出现以下错误:

Can't create/write to file '/mnt/temp/something' (Errcode: 13)

据我理解,Error Code 13是指文件权限错误。

但奇怪的是:

  1. 临时目录所有者已经是mysql,文件权限是1777

    drwxrwxrwt 2 mysql mysql 4.0K Nov 14 08:34 temp/

  2. 我能够以非 root 用户身份在该位置创建文件。

  3. mnt 上有 600 Gb 的空间,所以这应该不是问题。

  4. 我可以tmp轻松地在根磁盘上创建目录

/etc/mysql/my.cnf

user            = mysql
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
port            = 3306
basedir         = /usr
datadir         = /mnt/mysql
tmpdir          = /mnt/temp
#tmpdir         = /var/tmp

是否不允许在已安装的磁盘上创建 tmp 目录?或者我做错了什么?请帮忙。

答案1

这有点老了,但我刚刚自己解决了一个类似的问题(使用 /mnt/tmp 作为系统临时目录)并且不得不弄清楚为什么 MySQL 无法启动。

您可能遇到了 AppArmor 设置问题,导致 MySQL 无法使用 /mnt 驱动器上的目录。您需要将新的 tmp 路径添加到 MySQL app armor 允许路径列表中。

如果你查看系统日志,你可能会在每次尝试启动 mysql 服务器时看到类似这样的消息:

类型 = 1400 审计(1425343954.203:23):apparmor =“DENIED”操作=“mknod”父级 = 1 配置文件=“/usr/sbin/mysqld”名称=“/mnt/tmp/ibMXP5lg”pid = 16418 comm=“mysqld”requested_mask=“c”denied_mask=“c”fsuid = 106 ouid = 106

在这种情况下,您需要编辑文件:

/etc/apparmor.d/usr.sbin.mysqld

并添加以下行:

/mnt/tmp/ r,
/mnt/tmp/** rwk,

添加到文件中。然后只需重新启动 AppArmor:

$ sudo 服务 apparmor 重启

相关内容