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

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

[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后,数据库恢复正常。

时间: 2024-10-27 00:09:25

默认临时目录带来的权限问题的相关文章

IIS “拒绝访问临时目录”的解决方法

今天把博客程序部署到一台阿里云Windows主机上,通过浏览器访问时出现下面的错误: 创建 BlogConfigurationSettings 的配置节处理程序时出错: 拒绝访问临时目录.以其运行 XmlSerializer 的身份"IIS APPPOOL\www.cnblogs.com"没有足够的权限访问临时目录.CodeDom 将使用此进程用于进行编译的用户帐户,因此如果用户对系统临时目录没有访问权限,则将无法编译.使用 Path.GetTempPath() API 可找到临时目录

wps临时目录不存在提示无法卸载

  网友提问:安装wps之后,将其打开报错文件,打开的时候提示wps目录不存在的现象.并且将其卸载也是于事无补,那wps临时目录不存在提示无法卸载是怎么回事?下面就来看看wps临时目录不存在提示该如何解决? 故障解决: 一.wps应用程序本身的故障,先对其进行修复,尝试用工具里的配置工具修复.修复之后发现还是故障依旧的话,那么再用360安全卫士或者金山将其插件卸载掉,重新下载安装试试. 二.当然也可以是系统的用户变量和环境变量没设置导致此现象.现在我们重新去设置一下这两个变量参数. 1.参数的设

ASP.NET拒绝访问临时目录的解决方法_实用技巧

今天把博客程序部署到一台阿里云Windows主机上,通过浏览器访问时出现下面的错误: 复制代码 代码如下: 创建 BlogConfigurationSettings 的配置节处理程序时出错: 拒绝访问临时目录.以其运行 XmlSerializer 的身份"IIS APPPOOL\www.cnblogs.com"没有足够的权限访问临时目录.CodeDom 将使用此进程用于进行编译的用户帐户,因此如果用户对系统临时目录没有访问权限,则将无法编译.使用 Path.GetTempPath()

IIS启用GZip失败之原因:临时目录权限没设好

   IIS设置GZip时,有个临时目录可以自定义,当然也可以用默认的路径:%windir%IIS Temporary Compressed Files.临时目录是存放GZip压缩时IIS自动生成的一些文件,可能会占用几十兆的磁盘空间. IIS设置GZip临时目录       对于第一次配置IIS GZip的新手来说,可能会因为这因为那的原因导致不能正常启动GZip,选择临时目录轻而易举,但是临时目录的权限设置问题往往会被忽视.       通过测试,GZip临时目录需要添加如下权限即可:IIS

关于临时目录访问权限丢失问题!

问题描述 小弟在整服务器,使用安全狗对于服务器的系统垃圾进行了清理一边,但是意外发生了,IIS下第一个网站访问报错,查了半天是可能清理系统文件的时候,把权限给清了...网上找了很多教程添加权限什么的,但是就是解决不掉,请各位有过经验的前辈指引下.我已经针对:C:WINDOWSTemp文件夹设置了以下的权限. 解决方案 解决方案二:给整个windows目录可读权限,然后重启机子解决方案三:windows目录的users账户本身就有读取权限,这个没丢失.解决方案四:这几个目录都看一下Thepaths

linux默认的目录详细介绍

目录/文件 用途 来源 / /处于Linux文件系统树形结构的最顶端,它是Linux文件系统的入口,所有的目录.文件.设备都在/之下. - /bin 该目录存放着系统最常用的最重要的命令,相当于DOS下的内部命令,只不过它们是以独立的文件形式存在.比如:ls.cp.mkdir等命令.这个目录中的文件都是可执行的并且是普通用户都可以使用的命令.作为系统最基础的命令都放在这里. binary /usr 该目录是系统存放程序的地方,比如普通命令.帮助文件.安装的软件等.这个目录下有很多的文件和目录.当

Windows7下修改程序默认安装目录

  在Windows系统中,默认程序安装路径是"C:Program Files",要安装的软件多了会导致C盘臃肿不堪,但是每次安装程序的时候手动选择安装目录又觉得十分麻烦.关于修改Windows默认安装目录的文章网上有很多,不过都是针对XP系统的,很多使用WIN7系统的朋友直接照搬过来,结果运行Win7自带的一些程序或新安装程序时会直接报错,说找不到路径等. 下面介绍下Windows7下修改程序默认安装目录的方法 1.打开注册表编辑器 在开始菜单搜索框输入 "regedit&

Windows 7怎么修改默认安装目录?

  第一步.打开注册表编辑器 在开始菜单搜索框输入 "regedit" ,然后回车. 第二步.注册表修改ProgramFilesDir 依次展开注册表项"HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersion",在右侧窗口中找到"ProgramFilesDir"项,其默认数值数据为"C:Program Files",这个就是Windows默认安装目录,如你需要设定&qu

Win7系统如何修改默认安装目录

  第一步.打开注册表编辑器 在开始菜单搜索框输入 "regedit" ,然后回车. 第二步.注册表修改ProgramFilesDir 依次展开注册表项"HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersion",在右侧窗口中找到"ProgramFilesDir"项,其默认数值数据为"C:Program Files",这个就是Windows默认安装目录,如你需要设定&qu