缺少mysql.sock文件;导致操作错误:(2002,“无法通过套接字'/tmp/mysql.sock'(2)连接到本地MySQL服务器”)

3

首先,我保证我已经查看了每一个与此错误有关的问题。几乎每个人提供的解决方案都不同,没有人似乎理解这个错误的系统原因。我和许多在网络上遇到这个常见问题的人们需要的是解释实际发生了什么错的说明。

基本上,当我尝试运行:

python manage.py shell
from django.db import connection
cursor = connection.cursor()

使用 Django 1.4 和 Python 2.7.3,我遇到了以下错误:OperationalError: (2002, "Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)")。

我相信我的 settings.py 文件是正确的。并且我需要安装的所有东西都已经安装完毕。这是我的 settings.py 文件:

DATABASES = {
'default': {
    'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
    'NAME': 'database_name.mwb',                      # Or path to database file if using sqlite3.
    'USER': 'user',                      # Not used with sqlite3.
    'PASSWORD': 'PASS',                  # Not used with sqlite3.
    'HOST': '/tmp/mysql.sock',                      # Set to empty string for localhost. Not used with sqlite3.
    'PORT': '',                      # Set to empty string for default. Not used with sqlite3.
}}

经过几周在网上搜索答案,包括stackoverflow上的所有答案,我得出结论,我遇到的真正问题是我的计算机上没有mysql.sock文件,尽管mysql已安装。所以,真正的问题是如何获得一个?答案可能非常简单。

当我运行以下命令时:

cd /
sudo find . -name ".sock"

我什么都没得到。是的,我在我的Mac OS X Lion上安装了MySQL 5.25。它肯定已经安装好了:

sudo launchctl load -w /Library/LaunchDaemons/com.mysql.mysql.plist
com.mysql.mysqld: Already loaded

然而,运行:

mysql

产生:

-bash: mysql: command not found

经过漫长的时间,我找到了这个bug:http://bugs.mysql.com/bug.php?id=4174 .. 那么解决方案是什么呢?
完全透明:我只是一个程序员。我真的不懂电脑。所以,我对mysql、数据库或套接字一无所知。我认为这个问题需要真正了解计算机的人来解决。虽然现在看起来很明显,但花费了很长时间才将此错误归结为缺少套接字。网络上99%的人似乎没有用这种方法来解决这个错误。

连接类型在哪里指定?MySQL可以通过文件套接字或通过接受端口连接的套接字进行连接。我不使用Django,所以无法提供更多帮助,但我会查找控制Django连接到哪个数据库并更改URI的设置。 - Blender
啊,我刚刚编辑了一下包括设置文件。你觉得怎么样?它们看起来有问题吗? - jesuis
嗯,'HOST': '/tmp/mysql.sock' 不起作用。你需要提供类似于 mysql://{username}:{password}@{host}/{database} 的东西。由于我不使用 Django,所以我不知道 Django 期望的格式是什么。 - Blender
你确定这是它无法工作的源吗?你所说的是以下内容吗:"mysql://user:pass@/tmp/mysql.sock/whats_in_my_fridge.mwb"? - jesuis
我遇到了同样的问题。我刚刚解决了它。 - robert
3个回答

5
据我所知,这可能是以下两种情况之一:
  1. 您的MySQL服务器未运行;或者
  2. 它正在运行,但未配置使用/tmp/mysql.sock作为其套接字。
关于第2个问题,我认为这是新安装的MySQL的默认设置,但最好检查一下。尝试查看/etc/my.cnf文件的内容。检查是否有一行看起来像这样:socket=/path/to/socket - 其中/path/to/socket表示套接字的文件路径。如果存在此类条目且文件路径与/tmp/mysql.sock不同,则找到了问题所在。更改该行或Django配置以使它们匹配。
注意:如果您找不到/etc/my.cnf,可以自己创建它并添加适当的套接字设置(即只需添加socket=/tmp/mysql.sock行)以确保正确配置。
关于第1个问题,您可以按照这里提供的说明操作,确保您的MySql服务器正在运行。
祝你好运!

感谢您的回答!最初,我有一个空白的my.cnf文件或者根本就没有(记不清了)。所以,我按照您所说的编辑了该文件,内容如下:`[client] socket=/tmp/mysql.sock` `[mysqld] socket=/tmp/mysql.sock`至于第一点,我肯定是通过您提供的链接进行安装的。尝试了好几次了,不确定还能做些什么来安装它,因为.dmg确实非常简单易用。 - jesuis
没有实际的“mysql.sock”文件会有影响吗?此外,所有名为mysql的文件夹树元素都确实存在,就像自述文件所说的那样(/usr/local/mysql<version>),并且有一个符号链接指向同一位置。 - jesuis
2
嗯,我不太确定。也许你可以尝试使用IP而不是套接字。为了保险起见,请尝试使用127.0.0.1作为主机和3306作为端口,这是新安装的mysql的默认设置。 - ryuusenshi
好的,我会尝试这个并告诉你结果。谢谢。 - jesuis
1
它并不是在说你使用了那个密码,而是在说你使用了一个密码。你在MySQL中设置了一个用户吗?你可以尝试使用用户名root,因为“Mac mysql安装默认包括一个名为root的用户,没有密码”。 - ryuusenshi
显示剩余2条评论

4
您已经安装了MySQL客户端,但没有安装处理客户端连接的MySQL服务器。您需要安装MySQL服务器并运行它。

那么,我需要安装“mysql服务器”吗?还需要其他信息吗? - jesuis
这是文件的正确链接吗?http://dev.mysql.com/downloads/mysql/因为我已经安装了它。 - jesuis
你用的是Mac电脑,对吧?使用Homebrew。安装好后,使用它来安装MySQL。应该可以完美运行 :) - Ashray Baruah
Brew不是一个Python应用程序。请按照此处的说明操作:https://github.com/mxcl/homebrew/wiki/installation - Ashray Baruah
嗯,好的,我会试一下。我会回报的。如果不行,我就告你 ;) - jesuis
显示剩余3条评论

4
作为我在此处回答的内容:这里 使用
mysql_config --socket

我找到了mysql的socket位置,并应用它:
'HOST': '/Applications/MAMP/tmp/mysql/mysql.sock',

当您将套接字位置应用于MySQL连接的主机输入时,会出现相同的问题。新的错误消息,而不是错误代码:OperationalError: (2005, "Unknown MySQL server host '/tmp/mysql.sock' (0)") - bmc

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