无法使用Python的MySQLdb连接到localhost

eri*_*rin 17 python mysql connect

我是新手,所以可能有错误的术语,但是当我运行以下脚本时:

import MySQLdb

conn = MySQLdb.connect (host = 'localhost',
   user = 'erin',
   passwd = 'erin',
          db = 'sec')
Run Code Online (Sandbox Code Playgroud)

我收到错误:

  File "/Library/Python/2.6/site-packages/MySQL_python-1.2.3-py2.6-macosx-10.6-universal.egg/MySQLdb/__init__.py", line 81, in Connect
    return Connection(*args, **kwargs)
  File "/Library/Python/2.6/site-packages/MySQL_python-1.2.3-py2.6-macosx-10.6-universal.egg/MySQLdb/connections.py", line 187, in __init__
    super(Connection, self).__init__(*args, **kwargs2)
_mysql_exceptions.OperationalError: (2002, "Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)")
Run Code Online (Sandbox Code Playgroud)

该目录中没有名为mysql.sock的文件,但我不知道套接字是什么或如何使用MySQLdb模块为它指定正确的位置.

k0n*_*0nG 38

我设法通过将主机设置为"127.0.0.1"而不是"localhost"来解决此问题.

  • 这是有效的,因为当你指定`localhost`时,它会尝试通过unix套接字连接,而当你通过`127.0.0.1`连接时,它会尝试通过标准的TCP/IP连接.但是,如果指定`localhost`,则除非另行指定,否则它将使用默认的`/ tmp/mysql.sock`. (8认同)

rom*_*man 25

如果你的mysql套接字没有放在/tmp/mysql.sock中,你可以用它来指定它

conn = MySQLdb.connect (unix_socket = 'path_to_your_socket', host = 'localhost', user = 'erin', passwd = 'erin', db = 'sec')
Run Code Online (Sandbox Code Playgroud)

编辑:对于macosx上的mamp,mysql套接字路径应该是这样的 /Applications/MAMP/tmp/mysql/mysql.sock

  • 你应该在你的shell中使用`mysql_config --socket`,或者如果你在/ opt或者某个地方安装了/ path/to/mysql/bin/mysql_config (4认同)

小智 5

您的mysql安装可能会将套接字放在其他位置.您可以在mysql conf文件中配置它.

您可能想看看这个类似的帖子:在leopard上安装mysql:"无法通过套接字连接到本地MySQL服务器"