Mysql ERROR 1005(HY000):无法创建表'tmp'(错误号:13)

时间:2010-03-19 09:53:54

标签: mysql ubuntu ubuntu-9.10 mysql-error-1005

我在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

8 个答案:

答案 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