【问题标题】: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/…

标签: python mysql database django permissions


【解决方案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/
    

    【讨论】:

      猜你喜欢
      • 2017-12-20
      • 2017-06-21
      • 2013-09-14
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-04
      相关资源
      最近更新 更多