当前位置: 代码迷 >> 综合 >> Linux操作MySQL报错ERROR 1018 (HY000): Can't read dir of '.' (errno: 13 - Permission denied)
  详细解决方案

Linux操作MySQL报错ERROR 1018 (HY000): Can't read dir of '.' (errno: 13 - Permission denied)

热度:73   发布时间:2023-12-17 06:05:19.0

如题,本人的一次真实场景,在一次重启阿里云Linux服务器之后,在这个服务器运行的javaWeb项目调用接口500报错SQLexception,提示读取不到数据库的数据,然后我进到服务器进入mysql看看是不是有问题,然后以下对mysql的命令操作,输入命令show databases; 列出所有数据库,然后 use caogenofficialwebsite; 然后输入show tables;这时报错ERROR 1018 (HY000): Can’t read dir of ‘.’ (errno: 13 - Permission denied);这是提示没有权限读取数据表,所以我找mysql的datadir文件,看它的权限是谁拥有的

但是这个服务器环境极乱,找也麻烦,所以我直接用命令查看当前运行的mysql的datadir变量的路径,步骤如下:

  • 1.进入mysql命令行,运行show variables like ‘datadir’;效果如下,在这里插入图片描述
  • 2.上面的的值就是datadir文件的路径,cd /var/lib/mysql路径下,ll命令查看所有文件的具体信息,包括权限,注意此命令是两个小写的L,然后效果如下:
    在这里插入图片描述
    看,中间的我的项目,权限不是mysql了,而是root用户了,所以调用接口,访问数据库时候都报500SQLException(errno: 13 - Permission denied),文件属于root用户,其它用户无法写和读,这就是本次异常的原因。
原因找到了,解决方法:把这个root用户权限的文件给mysql授权,执行如下命令步骤
  • chown -R mysql:mysql caogenofficialwebsite
    chmod -R 755 caogenofficialwebsite/
    chown更改caogenofficialwebsite项目目录文件属主为mysql,chmod -R 添加可读权限。
    然后,安全重启mysql,命令:systemctl restart mysqld.service
    最后service mysqld status,查看mysql的运行状态。
    大功告成,这次意外是因为重启了服务器,导致此项目文件权限属主为root而不是mysql,所以导致此问题,在此记录。
  相关解决方案