MySQL错误1005(HY000):无法创建表 'TMP'(错误:13)
-
21-09-2019 - |
题
我在Ubuntu 9.10运行MySQL, 的MySQL进程正在运行,以root身份登录到MySQL,这是我给了所有权限的时候,我使用的是root帐户,我用我自己的DB(未MySQL的),我可以创建一个表,但是当我尝试创建临时表我得到这个错误:
错误1005(HY000):无法创建表 'TMP'(错误:13)
有关此查询:
CREATE TEMPORARY TABLE TMP(ID INT);
我有足够的空间在我的硬盘驱动器,所有的权限被授予(也无功/ lib中/ MySQL的有MySQL的权限)。
任何想法? 谢谢, Koby
解决方案 2
唉... 在/etc/mysql/my.cnf有使用的“TMP”的文件夹是/ tmp目录(从根)作为默认..并没有mysql的权限。 chmod为0777 / TMP将达到目的
其他提示
我一两个星期前有同样的问题。
在文件系统中的数据库文件夹是由错误的用户所拥有。
一个简单的chown -R mysql:mysql /var/lib/mysql/database_name
奏效了!
一切都在这里解释: http://www.dinosources.eu/十分之二千零十/ MySQL的-斜面创建表(它的意大利,但它是相当清楚)
干杯
我有上面上的/ tmp,正确的上下文和足够的磁盘空间正确的权限错误在Fedora 16。
撕扯我的头发一整天后,我跟踪这个问题下降到systemd配置MySQL服务的设置。
在/etc/systemd/system/multi-user.target.wants/mysqld.service
支票是否有设定PrivateTmp=true
。这种变化强制MySQL使用的/ tmp / systemd命名空间-XXXXX子目录,而不是直接将文件放入到/ tmp目录中。显然MySQL不喜欢和失败与该所需的临时文件的创建的任何查询许可被拒绝错误(13)。
可以如下重写此设置:
cat >> /etc/systemd/system/mysqld.service << END_CONFIG
.include /lib/systemd/system/mysqld.service
[Service]
PrivateTmp=false
END_CONFIG
然后通过运行重新加载配置:systemctl daemon-reload
和重启MySQL
你设置你的config.ini属性MaxNoOfOrderedIndexes? 它的默认值是128,所以如果你有大量的表格创建的,最后都不能创建。 看到: 的http://开发.mysql.com / DOC / refman / 5.1 / EN / MySQL的群集-NDBD-definition.html#ndbparam-NDBD-maxnooforderedindexes
我今天对我的亚马逊红帽实例同样的问题。我是能够执行既不MySQL的粗糙地(从MySQL壳),也不执行mysqldump的。为了解决这个我试图最明显的解决方案:
# chown root:root /tmp -v
# chmod 1777 /tmp -v
# /etc/init.d/mysqld restart
但是,这并没有帮助。在/var/log/mysqld.log我仍然看到:
141022 10:23:35 InnoDB: Error: unable to create temporary file; errno: 13
141022 10:23:35 [ERROR] Plugin 'InnoDB' init function returned error.
141022 10:23:35 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
后来才知道这是SELinux的这并没有让MySQL守护进程写入/ tmp目录。因此,我所做的是:
# getenforce
Enforcing
要验证是SELinux在执行模式下运行(你可以阅读更多关于这个这里)。造成这种情况的快速和快速的解决方案是切换到SELinux的许可模式:
# setenforce 0
# getenforce
Permissive
# /etc/init.d/mysqld restart
上面的解决了问题。
请注意,如果您是在硬化生产工作,那么当您从执行到宽松的切换非常小心。还请注意,此具体设置将在重新启动后重置。
我在这(错误:13)的错误,只有寻找到的/ var后想通出来/ log / syslog的,所以我的建议是这样的:
tail -f /var/log/syslog
您尝试访问该数据库后,看看是否有什么关系数据库文件,在我的情况下,它是
apparmor=[DENIED]
这意味着你需要处理的AppArmor,但在你的情况下,它可能是别的东西。
与我的情况下:
# semanage fcontext -a -t mysqld_db_t "/datadir(/.*)?"
# restorecon -Rv /datadir
#chcon -R -t mysqld_db_t /datadir
解决了问题。
如果在Linux与XAMPP phpMyAdmin安装,用户可以在该路径设定:
sudo chown -R mysql:mysql /opt/lampp/var/mysql/my_database