MySQL临时表创建出错(OS errno 13 - Permission denied)

一个客户向我抱怨:在MySQL查询小表没有问题,查询大表出错,下面是他发给我的出错的部分截屏(客户的表名被我隐藏了)。

这里的给出的信息已经比较明显了,是向/tmp目录中创建临时表失败(临时表的路径是由系统变量tmpdir决定的,默认在/tmp目录中),小表不需要用到临时表就没有问题,我登录上去检查一下MySQL的错误日志,发现有下面的记录:

text 复制代码
2024-01-27T09:31:14.059966Z 0 [ERROR] [MY-013129] [Server] A message intended for a client cannot be sent there as no client-session is attached. Therefore, we're sending the information to the error-log instead: MY-000001 - Can't create/write to file '/tmp/ib9IqGPN' (OS errno 13 - Permission denied)
2024-01-27T09:31:14.060056Z 0 [ERROR] [MY-012792] [InnoDB] Cannot create temporary merge file
2024-01-27T09:32:22.698498Z 0 [ERROR] [MY-013129] [Server] A message intended for a client cannot be sent there as no client-session is attached. Therefore, we're sending the information to the error-log instead: MY-000001 - Can't create/write to file '/tmp/ibuFD5pG' (OS errno 13 - Permission denied)
2024-01-27T09:32:22.698617Z 0 [ERROR] [MY-013129] [Server] A message intended for a client cannot be sent there as no client-session is attached. Therefore, we're sending the information to the error-log instead: MY-000001 - Can't create/write to file '/tmp/ibJyUu0y' (OS errno 13 - Permission denied)
2024-01-27T09:32:22.698786Z 0 [ERROR] [MY-012792] [InnoDB] Cannot create temporary merge file
2024-01-27T09:32:22.698783Z 0 [ERROR] [MY-012792] [InnoDB] Cannot create temporary merge file

24-01-27T09:30:06.361749Z 0 [ERROR] [MY-013129] [Server] A message intended for a client cannot be sent there as no client-session is attached. Therefore, we're sending the information to the error-log instead: MY-000001 - Can't create/write to file '/tmp/ibivRI0I' (OS errno 13 - Permission denied)
2024-01-27T09:30:06.361920Z 0 [ERROR] [MY-013129] [Server] A message intended for a client cannot be sent there as no client-session is attached. Therefore, we're sending the information to the error-log instead: MY-000001 - Can't create/write to file '/tmp/ibx78TGm' (OS errno 13 - Permission denied)
2024-01-27T09:30:06.361864Z 0 [ERROR] [MY-013129] [Server] A message intended for a client cannot be sent there as no client-session is attached. Therefore, we're sending the information to the error-log instead: MY-000001 - Can't create/write to file '/tmp/ibdcjrzB' (OS errno 13 - Permission denied)
2024-01-27T09:30:06.361955Z 0 [ERROR] [MY-013129] [Server] A message intended for a client cannot be sent there as no client-session is attached. Therefore, we're sending the information to the error-log instead: MY-000001 - Can't create/write to file '/tmp/iblFGa8t' (OS errno 13 - Permission denied)

看来是/tmp目录的权限出了问题,检查一下:

text 复制代码
oracle@Scott ~$ ll -ld /tmp
drwxrwxrwt. 11 root root 4096 Jan 29 09:22 /tmp
oracle@Scott ~$

[root@oracle data]# ll -ld /tmp
drwxr-xr-x. 70 root root 630784 Jan 29 09:40 /tmp

发现权限不足,而且居然没有粘滞位(Sticky bit),粘滞位是Unix文件系统权限的一个旗标。最常见的用法在目录上设置粘滞位,如此以来,只有目录内文件的所有者或者root才可以删除或移动该文件。如果不为目录设置粘滞位,任何具有该目录写和执行权限的用户都可以删除和移动其中的文件。实际应用中,粘滞位一般用于/tmp目录,以防止普通用户删除或移动其他用户的文件。使用下面的命令对tmp目录进行修改:

text 复制代码
sudo chmod 1777 /tmp 

然后故障排除😀

相关推荐
我叫张土豆20 分钟前
Android 14+ 模拟器抓包实录:把 Burp CA 装成系统 CA,让 targetSdk≥34 的 App 乖乖解密
android
booboosui4 小时前
Android 悬浮窗藏不住自己:一个标志位与 140 毫秒
android
传奇开心果4 小时前
【Flutter踩坑排雷】第5课:扩展方法冲突坑|同名扩展引发编译歧义,故障规避手段
android·flutter
.痞老板.6 小时前
mysql初阶--数据类型
android·数据库·mysql
StarsGreen7 小时前
Android 启动流程详解
android·linux·单片机·嵌入式硬件
Risehuxyc7 小时前
MySQL密码插件
数据库·mysql
科小怪8 小时前
ADB工具下载安装与常用命令:一条数据线连上电脑,就能给手机装应用、传文件、查日志
adb·智能手机·电脑
.痞老板.19 小时前
mysql初阶--数据库基础
数据库·mysql
城北徐宫21 小时前
MySQL约束条件一览
数据库·mysql
码农小河6621 小时前
基于SSM+JSP+MySQL的在线医疗服务系统的设计与实现
java·开发语言·mysql