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

标签 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, "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 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% 出现此错误的人似乎都没有以这种方式处理它。

最佳答案

据我所知,它是以下两种情况之一:

  1. 您的 MySQL 服务器没有运行,或者
  2. 它正在运行,但未配置为使用 /tmp/mysql.sock 作为其套接字

就 2 而言,我相信这是新安装的 MySQL 的默认设置,但检查一下也无妨。尝试查看 /etc/my.cnf 的内容。检查是否有这样一行: socket=/path/to/socket - 其中 /path/to/socket 是,因为它说的文件路径 socket 。如果有这样的条目并且文件路径不同于 /tmp/mysql.sock,那么您就发现了问题。更改该行或您的 Django 配置,使它们匹配。

注意:如果您找不到/etc/my.cnf,您可以自己创建它并添加适当的套接字设置(即只需添加行socket=/tmp/mysql.sock) 只是为了确保它已正确配置。

就 1 而言,您可以按照可用的说明进行操作 here并确保您的 MySql 服务器正在运行。

祝你好运!

关于python - 缺少 mysql.sock;产生 OperationalError : (2002, "Can' t 通过套接字 '/tmp/mysql.sock' (2)"连接到本地 MySQL 服务器",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11443504/

相关文章:

python - AWS beanstalk、mod_wsgi、python、进程和线程

python - 将分隔符分隔的字符串转换为 numpy 数组的有效方法

java - 如果我需要将密码解密为明文,如何加密数据库中的密码?

python - 向 MySQL 中插入数据 - Python

javascript - 使用 fetch post 请求进行正确的 Django CSRF 验证

python - 如何在 Scikit 上训练时获取权重矩阵

php - 使用 SQL 检查预约时间是否适合用户工作时间 - 夜间建议错误

python - Django 单个 View 中的多个上下文

Django模板条件变量赋值

python - LabelMe XML 到 CSV