16

我在 ubuntu 9.10 上运行 Mysql,Mysql 的进程以 root 身份运行,登录 Mysql 时我使用的是 root 帐户,我授予了所有权限,我使用的是我自己的 db(不是 mysql),我可以创建一个表,但是当我尝试创建临时表时出现此错误:

错误 1005 (HY000): 无法创建表 'tmp' (errno: 13)

对于此查询:

创建临时表 tmp (id int);

我的硬盘有足够的空间,所有权限都被授予(var/lib/mysql 也有 mysql 权限)。

任何想法?谢谢,科比

4

8 回答 8

36

几周前我遇到了同样的问题。文件系统上的数据库文件夹归错误的用户所有。一个简单chown -R mysql:mysql /var/lib/mysql/database_name的伎俩!

一切都在这里解释:http ://www.dinosources.eu/2010/10/mysql-cant-create-table (它是意大利语,但很清楚)

干杯

于 2010-10-27T19:57:37.150 回答
5

嗯...在/etc/mysql/my.cnf 中有一个“tmp”文件夹供使用,默认是/tmp(从根目录)..并且没有mysql权限。chmod 0777 /tmp 可以解决问题

于 2010-03-19T13:03:32.223 回答
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。

于 2012-05-24T19:23:12.720 回答
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 是否在强制模式下运行(您可以在此处阅读更多相关信息)。快速而快速的解决方案是切换到 SELinux 许可模式:

# setenforce 0
# getenforce 
Permissive
# /etc/init.d/mysqld restart

以上解决了我的问题。

请注意,如果您正在处理强化生产,则在从强制切换到许可时应该非常小心。另请注意,此特定设置将在重新启动后重置。

于 2014-10-22T10:52:21.493 回答
1

你在 config.ini 中设置属性 MaxNoOfOrderedIndexes 吗?它的默认值是 128,所以如果你有很多表要创建,最后一个是不能创建的。见: http ://dev.mysql.com/doc/refman/5.1/en/mysql-cluster-ndbd-definition.html#ndbparam-ndbd-maxnooforderedindexes

于 2012-04-21T14:29:13.317 回答
1

我遇到了这些 (errno: 13) 错误,只是在查看 /var/log/syslog 后才发现它们,所以我的建议是:

tail -f /var/log/syslog

尝试访问数据库后,看看这是否与数据库文件有关,在我的情况下是

apparmor=[DENIED]

这意味着您需要处理 apparmor,但在您的情况下,它可能是别的东西。

于 2015-12-16T21:12:38.133 回答
0

我的情况:

    # semanage fcontext -a -t mysqld_db_t "/datadir(/.*)?"
    # restorecon -Rv /datadir
    #chcon -R -t mysqld_db_t /datadir

解决了我的问题。

于 2017-08-31T15:18:17.110 回答
-1

如果在Linux上使用XAMPP安装了 PhpMyAdmin ,则可以在此路径中设置用户:

sudo chown -R mysql:mysql /opt/lampp/var/mysql/my_database

于 2019-07-17T17:16:39.910 回答