缺少 mysql.sock;产生 OperationalError: (2002, "Can't connect to local MySQL server through socket '

Posted

技术标签:

【中文标题】缺少 mysql.sock;产生 OperationalError: (2002, "Can\'t connect to local MySQL server through socket \'/tmp/mysql.sock\' (2)")【英文标题】:Missing mysql.sock; yielding OperationalError: (2002, "Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)")缺少 mysql.sock;产生 OperationalError: (2002, "Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)") 【发布时间】:2012-07-11 17:04:38 【问题描述】:

首先,我发誓我已经查看了每个引用此错误的问题。几乎每个人提供的解决方案都是不同的,而且似乎没有人理解错误的系统性原因。我和网络上许多遇到这个常见问题的人需要的是对实际问题的解释。

基本上,当我尝试运行时:

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.

在经历了数周的网络搜索(包括 *** 上的每个问题)之后,我得出的结论是,我遇到的真正问题是我的计算机上没有 mysql.sock 文件,即使安装了 mysql .所以,真正的问题是我如何得到一个?答案可能简单得令人尴尬。

当我跑步时:

cd /
sudo find . -name ".sock"

我什么都没有。是的,我已经在我的 mac osx 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 的设置。 啊'我刚刚编辑以包含设置文件。你怎么看?它们看起来不对吗? 好吧,'HOST': '/tmp/mysql.sock' 不起作用。您需要提供类似mysql://username:password@host/database 的信息。由于我不使用 Django,所以我不知道 Django 需要什么格式。 你确定这是它不起作用的原因吗?以下是您在说什么:“mysql://user:pass@/tmp/mysql.sock/whats_in_my_fridge.mwb”? 我遇到了同样的问题。我刚刚解决了。 ***.com/questions/18150858/… 【参考方案1】:

您已安装 mysql 客户端,但未安装处理客户​​端连接的 mysql-server。你需要安装mysql服务器并运行它。

【讨论】:

为什么在任何安装说明中都没有提到这一点? 那么,我需要安装“mysql server”吗?需要任何其他信息吗? 这是文件的正确链接吗? dev.mysql.com/downloads/mysql 因为我已经安装了。 你用的是mac吧?使用冲泡。得到它然后用它来安装mysql。应该可以完美运行:) Brew 不是 python 应用程序。按照此处的说明进行操作:github.com/mxcl/homebrew/wiki/installation【参考方案2】:

据我所知,这是两件事之一:

    您的 MySQL 服务器没有运行,或者 它正在运行,但未配置为使用/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 而言,您可以按照可用的说明进行操作 here 并确保您的 MySql 服务器正在运行。

祝你好运!

【讨论】:

感谢您的回答!所以,最初我有一个空白的 my.cnf 或者根本没有(不记得了)。所以我像你说的那样编辑了那个文件,如下:[client] socket=/tmp/mysql.sock[mysqld] socket=/tmp/mysql.sock 至于#1,我肯定通过了你链接到的安装程序。几次。不知道我还能做些什么来安装它,.dmg 非常简单。 没有实际的“mysql.sock”文件是否重要?此外,所有属于 mysql 的文件夹树元素都肯定存在,正如自述文件所说的 (/usr/local/mysql 嗯,我不太确定。也许您可以尝试使用 IP 而不是套接字。以防万一尝试 127.0.0.1 作为 HOST 和 3306 作为 PORT,这是新安装的 mysql 的默认设置。 好的,我会试试这个,然后告诉你进展如何。谢谢。 这并不是说您使用了该密码,而是说您使用了密码。您是否在 MySQL 中设置了用户?您可以尝试使用用户名 root 而不输入密码,因为 The Mac mysql installation includes by default a user named root with no password【参考方案3】:

正如我回答here:

mysql_config --socket

我发现mysql socket在哪里,我应用它:

'HOST': '/Applications/MAMP/tmp/mysql/mysql.sock',

【讨论】:

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

以上是关于缺少 mysql.sock;产生 OperationalError: (2002, "Can't connect to local MySQL server through socket '的主要内容,如果未能解决你的问题,请参考以下文章

新安装后缺少 mysql.sock

修复 mac 上缺少 mysql.sock 文件的问题?

脚本找出mysql中缺少主键的表

Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2

搞了个LAMP,没事也整理个问题集

搞了个LAMP,没事也整理个问题集