我在ubuntu 9.10上运行Mysql, Mysql的进程是以root身份运行的,我在登录Mysql时使用root帐号,我给了所有权限,我使用自己的db(不是mysql),我可以创建一个表,但是当我尝试创建时临时表我收到此错误:
ERROR 1005(HY000):无法创建表'tmp'(错误号:13)
对于此查询:
CREATE TEMPORARY TABLE tmp(id int);
我的硬盘中有足够的空间,所有权限都被授予(var / lib / mysql也有mysql权限)。
有什么想法吗? 谢谢, Koby
答案 0 :(得分:30)
几周前我遇到了同样的问题。
文件系统上的数据库文件夹由错误的用户拥有。
一个简单的chown -R mysql:mysql /var/lib/mysql/database_name
就行了!
这里解释的一切:http://www.dinosources.eu/2010/10/mysql-cant-create-table(这是意大利语,但很清楚)
干杯
答案 1 :(得分:4)
唉... 在/etc/mysql/my.cnf中有使用的“tmp”文件夹,它是/ tmp(从root用户)作为默认值..并且没有mysql权限。 chmod 0777 / tmp会做的伎俩
答案 2 :(得分:2)
我在/ tmp上有正确的权限,正确的上下文和Fedora 16上足够的磁盘空间。
经过一天的脱发后,我将问题跟踪到MySQL服务的systemd配置中的设置。
在/etc/systemd/system/multi-user.target.wants/mysqld.service
中检查是否有设置PrivateTmp=true
。此更改强制MySQL使用/ tmp / systemd-namespace-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。
答案 3 :(得分:1)
你在config.ini中设置属性MaxNoOfOrderedIndexes吗? 它的默认值是128,因此如果要创建大量表,则无法创建最后一个表。 看到: http://dev.mysql.com/doc/refman/5.1/en/mysql-cluster-ndbd-definition.html#ndbparam-ndbd-maxnooforderedindexes
答案 4 :(得分:1)
我今天在Amazon Red Hat实例上遇到了同样的问题。我既没有执行mysql decribe(来自mysql shell)也没有执行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是否在强制模式下运行(您可以阅读有关此here的更多信息)。快速而快速的解决方案是切换到SELinux许可模式:
# setenforce 0
# getenforce
Permissive
# /etc/init.d/mysqld restart
以上解决了我的问题。
请注意,如果您正在进行强化生产,那么当您从强制转换为允许时,您应该非常小心。另请注意,重启后将重置此特定设置。
答案 5 :(得分:1)
我遇到了这些(错误:13)错误,并且在查看/ var / log / syslog后才弄清楚它们,所以我的建议是这样的:
tail -f /var/log/syslog
在您尝试访问数据库后查看是否与数据库文件有关,在我的情况下是
apparmor=[DENIED]
这意味着您需要处理apparmor,但在您的情况下,它可能是其他内容。
答案 6 :(得分:0)
以我的情况:
# semanage fcontext -a -t mysqld_db_t "/datadir(/.*)?"
# restorecon -Rv /datadir
#chcon -R -t mysqld_db_t /datadir
解决了我的问题。
答案 7 :(得分:-1)
如果在Linux上安装了带有XAMPP的PhpMyAdmin,则可以在以下路径中设置用户:
sudo chown -R mysql:mysql /opt/lampp/var/mysql/my_database