默认临时目录带来的权限问题

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

一客户的本地数据库发现不能对其中的表进行查询,无法进行任何操作,联系我进行排查:
登录数据库:

[root@localhost tmp]# mysql -u root -pxxxxx
Welcome TO the MySQL monitor.  Commands END WITH ; OR \g.
Your MySQL connection id IS 2
Server version: 5.0.77 SOURCE distribution
 
TYPE 'help;' OR '\h' FOR help. TYPE '\c' TO clear the buffer.
 
mysql> USE customperformance2;
DATABASE changed
mysql> SELECT COUNT(*) FROM erp_user;
ERROR 1033 (HY000): Incorrect information IN file: '.\customperformance2\erp_user.frm'
mysql> DESC erp_user;         
ERROR 1 (HY000): Can't create/write to file '/tmp/#sql_13b3_0.MYI' (Errcode: 13)
$perror 13
OS error code  13:  Permission denied

为什么会出现这样的错误,为什么会报没有权限的错误?由于用户环境还不是很熟悉,先要了解一下用户数据库的安装情况:

[root@localhost tmp]# lsof -nc mysqld | grep -vE '(\.so(\..*)?$|\.frm|\.MY?|\.ibd|ib_logfile|ibdata|TCP)'
COMMAND    PID  USER   FD   TYPE             DEVICE     SIZE     NODE NAME
mysqld_sa 5002  root  cwd    DIR              253,0     4096        2 /
mysqld_sa 5002  root  rtd    DIR              253,0     4096        2 /
mysqld_sa 5002  root  txt    REG              253,0   801512   262190 /bin/bash
mysqld_sa 5002  root  mem    REG              253,0 56458704 59476863 /usr/lib/locale/locale-archive
mysqld_sa 5002  root  mem    REG              253,0    25464 59572719 /usr/lib64/gconv/gconv-modules.cache
mysqld_sa 5002  root    0r   CHR                1,3              2127 /dev/NULL
mysqld_sa 5002  root    1w   CHR                1,3              2127 /dev/NULL
mysqld_sa 5002  root    2w   CHR                1,3              2127 /dev/NULL
mysqld_sa 5002  root  255r   REG              253,0    13073 59486803 /usr/bin/mysqld_safe
mysqld    5043 mysql  cwd    DIR              253,0     4096 63013326 /var/lib/mysql
mysqld    5043 mysql  rtd    DIR              253,0     4096        2 /
mysqld    5043 mysql  txt    REG              253,0  7721832 59480637 /usr/libexec/mysqld
mysqld    5043 mysql    0r   CHR                1,3              2127 /dev/NULL
mysqld    5043 mysql    1w   REG              253,0   405427 62980617 /var/log/mysqld.log
mysqld    5043 mysql    2w   REG              253,0   405427 62980617 /var/log/mysqld.log
mysqld    5043 mysql    4u  unix 0xffff81031a97b1c0             22639 /var/lib/mysql/mysql.sock
mysqld    5043 mysql   18u  unix 0xffff8103312ecf00             22662 /var/lib/mysql/mysql.sock

用户的数据目录/var/lib/mysql:

[root@localhost log]# ls -lh /var/lib/mysql
总计 208G
drwxrwxrwx 2 mysql mysql  16K 05-10 01:22 customperformance2
-rwxrwxrwx 1 mysql mysql 208G 09-29 19:17 ibdata1
-rwxrwxrwx 1 mysql mysql 5.0M 09-29 19:17 ib_logfile0
-rwxrwxrwx 1 mysql mysql 5.0M 09-29 19:17 ib_logfile1
drwxrwxrwx 2 mysql mysql 4.0K 2011-05-30 keepsession
drwxrwxrwx 2 mysql mysql 4.0K 2011-05-30 mysql
-rwxrwxrwx 1 mysql mysql    1 07-07 17:08 mysql-bin.INDEX
srwxrwxrwx 1 mysql mysql    0 09-29 16:05 mysql.sock
drwxrwxrwx 2 mysql mysql 4.0K 2011-12-14 receiver_analyse
drwxrwxrwx 2 mysql mysql 4.0K 2011-05-30 test
drwxrwxrwx 2 mysql mysql  20K 2011-12-30 weibopromotion
You have NEW mail IN /var/spool/mail/root

可以看到目录的权限是正确的,这个时候在看看数据库的errorlog中有没有开排查的信息:

vi /var/log/mysqld.log
120929 15:57:15  mysqld ended
120929 15:57:15  mysqld started
^G/usr/libexec/mysqld: Can't create/write to file '/tmp/ibKbaUfl' (Errcode: 13)
120929 15:57:16  InnoDB: Error: unable to create temporary file; errno: 13
查看/tmp目录的权限
[root@localhost tmp]# ls  -lh /tmp/
总计 20K
drwx------ 2 root root 16K 09-29 11:37 lost+found
-rw-r--r-- 1 root root   0 09-29 12:00 tmp_domain

这里已经很明确了,mysql没有权限对/tmp进行操作:
这个时候我们可以有两种办法,一种为改变/tmp的权限,另一种为改变数据库的临时目录;我采取了修改数据库临时目录的方法:

vi /etc/my.cnf
# Point the following paths TO different dedicated disks
# tmpdir          = /tmp
#log-UPDATE     = /path-to-dedicated-directory/hostname

可以看到用户的tmpdir变量并没有指定,被注释掉,所以数据库会默认指定到/tmp目录;
修改其临时目录到用户的数据目录:

# Point the following paths TO different dedicated disks
 tmpdir          = /var/lib/mysql/
#log-UPDATE     = /path-to-dedicated-directory/hostname

重启mysql后,数据库恢复正常。

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
文件复制到ftp服务器时发生错误,请检查是否有权限将文件放到该服务器上
文件复制到ftp服务器时发生错误,请检查是否有权限将文件放到该服务器上
4851 0
|
关系型数据库 MySQL 数据库
如何更改mysql可执行路径及更改mysql数据库文件路径
一、如何更改服务中MySQL的可执行文件路径: 解决方法:到注册表里HKEY_LOCAL_MECHINE---SYSTEM ---CurrentControlSet 更改查找一、 MySQL项值,然后改路径。
3294 0
|
10月前
if双份分枝判断是否有benet目录没有创建存在提示已经创建目录
if双份分枝判断是否有benet目录没有创建存在提示已经创建目录
26 1
|
9月前
|
安全 Linux
6.4 文件与目录的默认权限与隐藏权限
6.4 文件与目录的默认权限与隐藏权限
57 0
|
10月前
|
搜索推荐
更改目录
写完了一篇文章,进行对标题实现一个自动更改的目的,通过word对文章标题实现一个自动更改目录的功能,在更改的过程中遇到了出现了很多不明白的地方的,也是让自己陷入了两难的境界。
34 0
|
10月前
目录的操作
目录的操作
63 0
|
SQL Oracle 关系型数据库
Oracle安装临时客户端使用总结
Oracle安装临时客户端使用总结
180 0
Oracle安装临时客户端使用总结
|
编解码 Java 应用服务中间件
修改idea的临时数据存放目录(默认保存在C盘用户目录下的.IntelliJIdea2020.3)
修改idea的临时数据存放目录(默认保存在C盘用户目录下的.IntelliJIdea2020.3)
848 0
修改idea的临时数据存放目录(默认保存在C盘用户目录下的.IntelliJIdea2020.3)
|
安全 Windows
windows服务器给某个文件目录增加最高权限方法
windows服务器给某个文件目录增加最高权限方法
290 0
windows服务器给某个文件目录增加最高权限方法
|
Java
Confluence 6 临时目录(安装目录)
temp 目录是由 Java 运行时进行配置的,同时一些 Confluence 的组件将会写入历史文件或者锁定文件到这个目录中。
951 0