操作错误:(2002,“无法通过套接字'/var/run/mysqld/mysqld.sock'(2)连接到本地MySQL服务器”)

31
在Django中连接MySQL数据库时,我遇到了错误。
  1. 我确认MySQL服务器正在运行。
  2. /var/run/mysqld/mysqld.sock文件不存在。
  3. 当我运行$ find / -name *.sock -type s命令时,只得到/tmp/mysql.sock和一些其他无关的输出。
  4. 我在/etc/my.cnf中添加了socket = /tmp/mysql.sock,然后重新启动了mysql,退出了Django shell,并尝试连接MySQL数据库。但我仍然遇到了相同的错误。

我进行了大量搜索,但仍不知道该怎么解决。

谢谢提供帮助。

好吧,我尝试了一些方法。并且它们起作用了。 我采取了以下步骤。

  1. 添加socket = /tmp/mysql.sock。重新启动MySQL服务器。
  2. ln -s /tmp/mysql.sock /var/lib/mysqld/mysqld.sock

今天我又遇到了另一个问题。我不能登录MySQL。 我是MySQL的新手。所以我猜MySQL服务器和客户端使用相同的socket进行通信。 我在my.cnf文件的[mysqld] [client]块中添加了socket = /var/mysqld/mysqld.sock,现在它可以工作了。


1
你可以使用MySQL CLI本地连接到你的MySQL服务器吗?(类似这样:mysql -u you_user_name -p - Sylvain Leroux
你的 DATABASES 设置是什么? - twil
我可以使用 mysql -u user_name -p 连接到 MySQL 服务器。我将数据库设置为 Django 推荐的。 - robert
你可以直接设置 socket = /var/run/mysqld/mysqld.sock 吗?这样你就不必手动链接 /tmp/mysql.sock 到该路径了。 - Hieu Nguyen
5个回答

71

使用"127.0.0.1"代替"localhost"

DATABASES = {
   'default': {
      'ENGINE': 'django.db.backends.mysql',
      'NAME': 'django',
      'USER': 'root',
      'PASSWORD': '',
      'HOST': '127.0.0.1',
      'PORT': '3306',
   }
}

6
为什么这会有任何差别呢?在大多数情况下,localhost不是和127.0.0.1一样吗? - Calimo
4
这是软件开发中常有的一种苦乐参半的时刻:我很高兴它能正常运行,但同时我不知道为什么它能这样工作。还是要感谢。 - Luis Milanese

1

对我来说,这个方法可行:使用OPTIONS属性并将read_default_file的路径设置为my.cnf文件的路径。

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'dbname',
        'USER': 'root',
        'PASSWORD': '',
        'HOST': 'localhost',
        'PORT': '3306',
        'OPTIONS': {
            'read_default_file': '/opt/lampp/etc/my.cnf',
        }
    }
}

1

你需要将主机地址从'localhost'更改为'127.0.0.1',并检查你的Django应用程序 :)


0
在Flask中,您可以使用以下代码:
``` app = Flask(__name__) app.config["MYSQL_HOST"] = "127.0.0.1" app.config["MYSQL_USER"] = "root" ... ```
这些代码用于配置MySQL数据库连接。

0

当我使用Docker连接MySQL和Django时,遇到了这个问题。

尝试使用 'PORT':'0.0.0.0'

不要使用'PORT': 'db'。如果您尝试在Docker之外运行应用程序,则此方法无效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接