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 

然后故障排除😀

相关推荐
凉拌青瓜哈1 小时前
DVWA-LOW级-SQL手工注入漏洞测试(MySQL数据库)+sqlmap自动化注入-小白必看(超详细)
mysql·安全·网络安全
二楼后座。2 小时前
Golang操作MySQL json字段优雅写法
mysql·golang·json
lilian1293 小时前
linux系统mysql性能优化
linux·运维·mysql
小袁拒绝摆烂3 小时前
SQL开窗函数
android·sql·性能优化
apihz4 小时前
VM虚拟机全版本网盘+免费本地网络穿透端口映射实时同步动态家庭IP教程
android·服务器·开发语言·网络·数据库·网络协议·tcp/ip
UestcXiye4 小时前
Rust Web 全栈开发(五):使用 sqlx 连接 MySQL 数据库
数据库·mysql·rust
baidu_247438614 小时前
Android MPAndroidChart使用
android
天平5 小时前
react native现代化组件库的推荐 【持续更新...】
android·前端·react native
未来之窗软件服务5 小时前
MySQL 中图标字符存储问题探究:使用外挂法,毕业论文——仙盟创梦IDE
数据库·mysql·毕业论文·仙盟创梦ide·东方仙盟
apihz6 小时前
通用图片搜索-搜狗源免费API接口使用指南
android·java·python·php·音视频