详细解决方案
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,所以导致此问题,在此记录。