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 errnoEPIPE
是 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?