MySQL 无法写入临时目录

Posted

技术标签:

【中文标题】MySQL 无法写入临时目录【英文标题】:MySQL can't write to temp directory 【发布时间】:2014-07-15 02:28:25 【问题描述】:

我尝试了所有方法,每当我尝试启动 mysql 时,我都会收到此错误

140526 18:21:36 InnoDB: Using Linux native AIO
^G/usr/sbin/mysqld: Can't create/write to file '/mysql/ibAlmthH' (Errcode: 13)

我什至尝试使用完全写入权限在 my.cnf 中更改 tmp 目录,但我仍然收到该错误

我试过这篇文章

https://***.com/a/16178696

但还是一样的错误

我该怎么办

【问题讨论】:

可能是那个目录的权限问题,你检查了吗? @AbimaranKugathasan 没有权限问题,已经是 777 errno EPIPE 是 13 代表“断管” @BasileStarynkevitch errno 13 是在asm-generic/errno-base.h (CentOS 5.3) #define EACCES 13 /* Permission denied */ 中定义的“权限被拒绝” 【参考方案1】:

参考这个,从 *** 问题号-2783313 可能有帮助:

最近的 Ubuntu 服务器版本(例如 10.04)附带 AppArmor 并且 MySQL 的配置文件可能默认处于强制模式。您可以通过执行sudo aa-status 来检查这一点,如下所示:

# sudo aa-status
5 profiles are loaded.
5 profiles are in enforce mode.
   /usr/lib/connman/scripts/dhclient-script
   /sbin/dhclient3
   /usr/sbin/tcpdump
   /usr/lib/NetworkManager/nm-dhcp-client.action
   /usr/sbin/mysqld
0 profiles are in complain mode.
1 processes have profiles defined.
1 processes are in enforce mode :
   /usr/sbin/mysqld (1089)
0 processes are in complain mode.

如果 mysqld 包含在强制模式中,那么它可能是拒绝写入的那个。当 AppArmor 阻止写入/访问时,条目也将写入 /var/log/messages。您可以编辑/etc/apparmor.d/usr.sbin.mysqld 并在底部附近添加/data//data/*,如下所示:

...
/usr/sbin/mysqld 
    ...
    /var/log/mysql/ r,
    /var/log/mysql/* rw,
    /var/run/mysqld/mysqld.pid w,
    /var/run/mysqld/mysqld.sock w,
    /data/ r,
    /data/* rw,

然后让 AppArmor 重新加载配置文件。

# sudo /etc/init.d/apparmor reload

警告:以上更改将允许 MySQL 读取和写入 /data 目录。我们希望您已经考虑过这对安全的影响。

【讨论】:

【参考方案2】:

尝试手动运行此命令:

touch /mysql/ibAlmthH

如果创建失败,则说明文件系统有问题,例如只读文件系统, 所以你需要先解决文件系统问题, 还要检查这个目录的可用磁盘空间,可能是没有空间。

【讨论】:

我试过了,我没有收到错误,但 mysql 仍然无法启动【参考方案3】:

更改目录权限以读取、写入和执行..

Chmod 777 /directory_path

【讨论】:

以上是关于MySQL 无法写入临时目录的主要内容,如果未能解决你的问题,请参考以下文章

Spark SQL 2.1 是不是支持将临时表或配置单元表写入 Mysql/Oracle?

NSData - 写入临时文件/目录

如何解决postgresql中的“无法写入临时文件块:设备上没有剩余空间”?

了解致命错误:无法在写入上下文中使用临时表达式

错误:Bundler 没有创建临时目录的写入权限

错误:无法写入临时文件的块 37583345:设备上没有剩余空间