MySQL:Can';t创建/写入文件'/tmp/#sql#u3c6_0.MYI';(错误代码:2)-这到底是什么意思?
出于某种原因,我的生产数据库决定发出此消息。所有对数据库的应用程序调用都失败,错误如下:MySQL:Can';t创建/写入文件'/tmp/#sql#u3c6_0.MYI';(错误代码:2)-这到底是什么意思?,mysql,exception,jdbc,Mysql,Exception,Jdbc,出于某种原因,我的生产数据库决定发出此消息。所有对数据库的应用程序调用都失败,错误如下: PreparedStatementCallback; SQL [ /*long sql statement here*/ ]; Can't create/write to file '/tmp/#sql_3c6_0.MYI' (Errcode: 2); nested exception is java.sql.SQLException: Can't create/write to file '/tmp/
PreparedStatementCallback; SQL [ /*long sql statement here*/ ];
Can't create/write to file '/tmp/#sql_3c6_0.MYI' (Errcode: 2);
nested exception is java.sql.SQLException: Can't create/write to file '/tmp/#sql_3c6_0.MYI' (Errcode: 2)
我甚至不知道这意味着什么。/tmp
中没有文件#sql_3c6_0.MYI
,出于某种原因,我无法创建带有#
字符的文件。有人听说过或看到过这个错误吗?可能有什么问题以及一些可能的问题需要考虑
MySQL数据库似乎已经启动并运行,可以通过控制台进行查询,但应用程序似乎无法访问它。应用程序代码/文件没有更改。事情突然发生了。所以我甚至不知道从哪里开始,或者应该采取什么解决策略。有什么想法吗?这通常意味着您的
/tmp
分区空间不足,无法创建文件,或者由于权限问题,mysqld
进程无法写入该目录。有时,当selinux
下雨时,你的游行队伍就会出现这种情况
默认情况下,任何需要“临时文件”的操作都将进入
/tmp
目录。您看到的名称只是一些内部随机名称。在Fedora系统上运行wordpress时,我也遇到了这个错误
我在谷歌上搜索了一下,想办法解决这个问题
也许这对你也有帮助
cat /etc/my.cnf | grep tmpdir
我的my.cnf
tmpdir=/tmp
添加到[mysqld]
/etc/init.d/mysqld重新启动
文件名看起来像是MySQL中查询创建的临时表。这些文件通常是非常短暂的,它们是在一个特定的查询过程中创建的,然后立即清理 然而,它们可能会变得非常大,这取决于查询需要在临时表中处理的数据量。或者您可能有多个创建临时表的并发查询,如果同时运行足够多的查询,它们可能会耗尽磁盘空间 我做MySQL咨询,我帮助了一位客户,他在根分区上有间歇性的磁盘满错误,尽管他每次查看时都有大约6GB的空闲空间。在检查了他的查询日志之后,我们发现他有时有四个或更多的查询并发运行,每个查询在/tmp中创建一个1.5GB的临时表,该表位于他的根分区上。轰 我给他的解决方案是:
- 增加MySQL配置变量
和tmp_table_size
以便MySQL可以在内存中创建非常大的临时表。但是,允许MySQL在内存中创建1.5GB临时表不是一个好主意,因为无法限制并发创建这些表的数量。这样你可以很快耗尽你的记忆max_heap_table_size
- 将MySQL配置变量
设置为另一个磁盘分区上具有更多空间的目录tmpdir
- 找出哪些查询正在创建如此大的临时表,并优化查询。例如,使用索引帮助该查询将其扫描减少到表的较小部分。或者归档数据中的一些数据,这样查询就不会有那么多行需要扫描
-X'/tmp/systemd namespace*'
,如下所示:
/usr/sbin/tmpwatch "$flags" -x /tmp/.X11-unix -x /tmp/.XIM-unix \
-x /tmp/.font-unix -x /tmp/.ICE-unix -x /tmp/.Test-unix \
-X '/tmp/systemd-namespace*' \
-X '/tmp/hsperfdata_*' 10d /tmp
副作用是未使用的私有名称空间文件夹不会自动删除。非常感谢ArturZ为我指明了正确的方向。我的系统上没有安装tmpwatch,因此这不是我的问题的原因。但最终结果是一样的:systemd创建的private/tmp正在被删除。下面是发生的情况:
x /tmp/systemd-namespace-*
x /tmp/systemd-namespace-*/private
问题解决了。更好的w
chown root:root /tmp
chmod 1777 /tmp
/etc/init.d/mysqld restart
mysql -u root -p
systemctl start mysqld.service
chown root:root /tmp && chmod 1777 /tmp
chmod -R 777 /tmp
[mysqld]
tmpdir=/tmp
mysqldump: Couldn't execute 'show fields from `wp_autoupdate`': Can't create/write to file '/tmp/#sql_1680_0.MAI' (Errcode: 2 "No such file or directory") (1)
tmpdir = /var/lib/mysql/tmp
dd if=/dev/zero of=/tmp/file.txt count=1024 bs=1048576