缺少mysql.sock;出现OperationalError:(2002,“无法通过socket连接到本地MySQL服务器'/tmp/mysql.sock'(2)”)

时间:2012-07-12 00:28:04

标签: python mysql django sockets mysql.sock

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

基本上,当我尝试跑步时:

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

使用Django 1.4和python 2.7.3,我收到以下错误:OperationalError:(2002,“无法通过socket连接到本地MySQL服务器'/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

经过很长一段时间,我发现了这个错误:http://bugs.mysql.com/bug.php?id=4174 ..那么解决方案是什么?

完全披露:我只是一名程序员。我真的对计算机一无所知。所以,我对mysql,数据库或套接字一无所知。我认为这个问题需要一些真正了解计算机的人才能修复。虽然现在看来显而易见,但是将这个错误表述为来自缺少的套接字需要很长时间。有这个错误的网络上99%的人似乎没有这样接近它。

4 个答案:

答案 0 :(得分:5)

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

  1. 您的MySQL服务器未运行,或
  2. 它正在运行,但未配置为使用/tmp/mysql.sock作为其套接字
  3. 就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服务器正在运行。

    祝你好运!

答案 1 :(得分:4)

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

答案 2 :(得分:4)

我回答here

mysql_config --socket

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

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

答案 3 :(得分:0)

您需要将主机更改为“ 127.0.0.1” 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': '127.0.0.1', # Set to empty string for localhost. Not used with sqlite3. 'PORT': '', # Set to empty string for default. Not used with sqlite3. }}