缺少mysql.sock; 产生OperationalError:(2002年, "无法通过套接字 '/tmp/mysql.sock' 连接到本地MySQL服务器(2)")

jes*_*uis 3 python mysql sockets django mysql.sock

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

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

python manage.py shell
from django.db import connection
cursor = connection.cursor()
Run Code Online (Sandbox Code Playgroud)

使用Django 1.4和python 2.7.3,我收到以下错误:OperationalError:(2002,"无法通过套接字连接到本地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.
}}
Run Code Online (Sandbox Code Playgroud)

经过数周的网络搜索,包括每一个在stackoverflow上的答案,我得出结论,我遇到的真正问题是我的计算机上没有mysql.sock文件,即使安装了mysql.所以,真正的问题是如何获得一个?答案可能很简单.

当我跑:

cd /
sudo find . -name ".sock"
Run Code Online (Sandbox Code Playgroud)

我什么都没得到.是的,我在我的mac osx lion上安装了mysql 5.25.它肯定安装:

sudo launchctl load -w /Library/LaunchDaemons/com.mysql.mysql.plist
com.mysql.mysqld: Already loaded
Run Code Online (Sandbox Code Playgroud)

但是,运行:

mysql
Run Code Online (Sandbox Code Playgroud)

收益率:

-bash: mysql: command not found
Run Code Online (Sandbox Code Playgroud)

经过很长一段时间,我发现这个bug:http://bugs.mysql.com/bug.php?id=4174 ..所以有什么解决办法?

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

ryu*_*shi 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服务器正在运行.

祝好运!

  • 嗯,我当时不太确定.也许你可以尝试使用IP而不是套接字.以防万一尝试127.0.0.1作为HOST和3306作为PORT,这是新安装的mysql的默认设置. (2认同)