MySQL连接错误1018的全称是Can't read dir of './数据库名/' (errno: 13),本质是MySQL服务进程没有权限读取对应数据库的目录,或者数据库目录本身存在损坏、丢失的情况。该错误多发生在Linux系统部署的MySQL实例中,Windows环境下出现的概率相对较低。

错误1018的常见触发场景
了解触发场景能帮助我们更快定位问题,常见的触发情况有以下几种:
- 手动修改了MySQL数据目录的权限,导致mysql用户失去访问权限
- 迁移数据库目录后没有同步调整目录归属用户和权限
- 数据库目录被误删除、损坏,或者存在特殊字符命名
- MySQL服务启动时使用的用户和目录所属用户不一致
排查错误1018的具体步骤
第一步:确认错误详细信息
首先查看MySQL的错误日志,获取更具体的错误提示,日志默认路径通常在/var/log/mysql/error.log,也可以通过以下命令查看实时日志:
tail -f /var/log/mysql/error.log
日志中会明确提示无法读取的具体目录路径,以及对应的错误码,确认错误码为13(权限拒绝)即可定位为权限类问题。
第二步:检查数据库目录权限和归属
找到报错对应的数据库目录,默认MySQL数据目录为/var/lib/mysql,进入该目录查看对应数据库文件夹的权限和归属:
cd /var/lib/mysql ls -l
正常情况下,数据库目录的所属用户和所属组都应该是mysql,权限至少为700,如果显示所属用户是root或者其他用户,就说明权限配置存在问题。
第三步:检查目录完整性
确认目录存在且没有损坏,进入对应数据库目录查看是否存在db.opt文件,以及表结构文件是否完整:
cd 数据库名 ls -l
如果目录不存在或者文件大量丢失,就需要从备份中恢复该数据库目录。
解决错误1018的具体方法
方法一:调整目录权限和归属
如果是权限不足导致的问题,直接修改数据库目录的所属用户和权限即可,执行以下命令:
# 修改整个数据目录的归属,递归处理所有子目录 chown -R mysql:mysql /var/lib/mysql # 修改整个数据目录的权限,确保mysql用户有读写执行权限 chmod -R 700 /var/lib/mysql
执行完成后重启MySQL服务使配置生效:
systemctl restart mysql
方法二:修复损坏的数据库目录
如果目录存在但文件损坏,可以尝试使用MySQL自带的修复工具处理,首先登录MySQL执行以下命令检查表状态:
USE 数据库名; CHECK TABLE 表名;
如果提示表损坏,执行修复命令:
REPAIR TABLE 表名;
如果整个数据库目录损坏严重,建议从最近的备份中恢复整个数据库目录,恢复后同样需要调整目录归属为mysql。
方法三:重新创建数据库
如果数据库没有重要数据,也可以直接删除损坏的数据库,重新创建:
DROP DATABASE IF EXISTS 数据库名; CREATE DATABASE 数据库名;
创建完成后再次确认目录归属是否正确,避免再次出现权限问题。
预防错误1018的注意事项
为了避免后续再次出现该错误,日常维护时可以注意以下几点:
- 不要随意修改MySQL数据目录的权限和归属,非必要不手动操作数据目录下的文件
- 迁移数据库目录时,同步修改目录的所属用户为mysql,并且保持权限配置一致
- 定期备份数据库数据,避免目录损坏后无法恢复
- 启动MySQL服务时确认使用mysql用户启动,不要使用root用户直接启动服务
注意:操作数据库目录前一定要先停止MySQL服务,避免数据写入过程中出现文件冲突,导致数据损坏。