首先,我保证我已经查看了每一个与此错误有关的问题。几乎每个人提供的解决方案都不同,没有人似乎理解这个错误的系统原因。我和许多在网络上遇到这个常见问题的人们需要的是解释实际发生了什么错的说明。
基本上,当我尝试运行:
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%的人似乎没有用这种方法来解决这个错误。
'HOST': '/tmp/mysql.sock'
不起作用。你需要提供类似于mysql://{username}:{password}@{host}/{database}
的东西。由于我不使用 Django,所以我不知道 Django 期望的格式是什么。 - Blender