mysql错误:错误1018(HY000):无法读取'.'的目录(错误号:13)

Posted

技术标签:

【中文标题】mysql错误:错误1018(HY000):无法读取\'.\'的目录(错误号:13)【英文标题】:mysql error : ERROR 1018 (HY000): Can't read dir of '.' (errno: 13)mysql错误:错误1018(HY000):无法读取'.'的目录(错误号:13) 【发布时间】:2012-06-19 10:51:44 【问题描述】:

当我尝试在 mysql 中查看数据库时,我收到此错误:

ERROR 1018 (HY000): Can't read dir of '.' (errno: 13)

这会阻止我的应用显示...

我的 django 调试器说:

(2002, "Can't connect to local MySQL server through socket '/var/lib/mysql/my_database' (13)")

这是我的设置文件:

DATABASES = 
'default': 
    'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
    'NAME': 'my_database',                      # Or path to database file if using sqlite3.
    'USER': 'root',                      # Not used with sqlite3.
    'PASSWORD': '****',                  # Not used with sqlite3.
    'HOST': '',                      # Set to empty string for localhost. Not used with sqlite3.
    'PORT': '3306',                      # Set to empty string for default. Not used with sqlite3.

什么可能导致问题?

提前致谢

【问题讨论】:

您以前连接过吗?您能否在您的设置文件中进行编辑,以便我们更好地了解正在发生的事情? 如果您的系统使用 AppArmor:ar.zu.my/… 【参考方案1】:

您需要为目录设置所有权和权限:

chown -R mysql:mysql /var/lib/mysql/ #your mysql user may have different name
chmod -R 755 /var/lib/mysql/

注意:-R 使命令递归 - 如果/var/lib/mysql/ 中没有子目录,您可以省略它。

【讨论】:

我应该用我的mysql用户替换第一个mysql吗? 运行mysqld 守护程序的用户 - 请参阅/etc/passwd。我相信默认是mysql 我改变了它并且它工作但现在它工作但如果我重新加载它不会......如果我再次重新加载它会 @TonyKyriakidis 你重启mysqld了吗? (service mysqld restart) 您还需要更改 apparmor 设置并重新加载。这是 2012 年的答案,我不确定当时是否执行了 apparmor,但我遇到了同样的问题,仅此答案并没有帮助。修复 apparmor 配置文件完成了这项工作。编辑/etc/apparmor.d/usr.sbin.mysqldsudo service apparmor reload【参考方案2】:
chown -R mysql:mysql /var/lib/mysql/

chmod -R 755 /var/lib/mysql/

我可以确认这两个 chmod 语句对我有用(Webmin 没有看到数据库也没有显示表)但我不确定为什么在设置了两打服务器 (Centos) 后我必须这样做过去几年的 MySQL。

【讨论】:

为什么你添加了与@scriptin 相同的答案,只是说它有效,但你不知道它们实际做了什么。最好在另一个答案中发表评论并投票(如果可以的话)。向其他人建议您不了解的事情是个坏主意。【参考方案3】:

这应该适用于 Mac 用户:

sudo chown -R mysql:mysql /usr/local/mysql/
sudo chmod -R 755 /usr/local/mysql/

如果这不起作用,请尝试运行 which mysql 以查看您的 mysql 安装所在的位置,然后将上述命令中的 /usr/local/mysql/ 替换为 'bin' 目录之前的任何内容。

例如,在我的系统上,which mysql 产生以下输出:

/usr/local/mysql/bin/mysql

所以我的路径是/usr/local/mysql/

【讨论】:

我在 Google 上找到了这个,虽然我能够使用答案来解决我的问题,但我有不同的路径。所以我发布这个是为了其他可能会在这里结束的 mac 用户。 它似乎被重新安置在 Macports 下的 El Capitan 中。我不得不使用 sudo chown -R _mysql:_mysql /opt/local/var/db/mysql56/ sudo chown -R _mysql:_mysql /opt/local/var/run/mysql56/ sudo chown -R _mysql:_mysql /opt/本地/var/log/mysql56/ 谢谢。这在升级到 El Capitan 后帮助了我。 也在 OS X 上 (Mavericks 10.9) - 我的 mysql 用户是 _mysql。你可以通过ps aux |grep mysql找到你的用户(和mysql安装目录)。【参考方案4】:

osx high sierra 使用以下命令解决问题:

chown -R mysql:mysql /usr/local/mysql

【讨论】:

【参考方案5】:

在 CentOS/RedHat 上,你应该在不同的路径上做同样的事情:

chown -R mysql:mysql /data/mysql/
chmod -R 755 /data/mysql/

【讨论】:

我的 /data/ 在 centos 7 上是空的【参考方案6】:

如果您使用自制软件安装了 mariadb,您可以在 OS X 上运行以下命令

sudo chown -R mysql:mysql /var/lib/var/mysql/
sudo chmod -R 777 /usr/local/var/mysql/

【讨论】:

以上是关于mysql错误:错误1018(HY000):无法读取'.'的目录(错误号:13)的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 错误 [1215] [HY000] - 无法添加外键 [重复]

错误 1728 (HY000): 无法从 mysql.user 加载。该表可能已损坏

错误 2003 (HY000): 无法连接到 MySQL 服务器 (111)

错误 2002 (HY000): 无法通过套接字 '/tmp/mysql.sock' 连接到本地 MySQL 服务器

错误 2002 (HY000): 无法通过套接字 '/tmp/mysql.sock' 连接到本地 MySQL 服务器

MySQL 8 - DROP 或 ALTER 导致错误 3664 (HY000): 无法设置 SDI