PyMySQL无法连接到localhost上的MySQL

O'F*_*mah 33 python mysql mysql-error-2003

我正在尝试使用PyMySQL连接到localhost上的MySQL:

import pymysql
conn = pymysql.connect(db='base', user='root', passwd='pwd', host='localhost')
Run Code Online (Sandbox Code Playgroud)

但是(在Python 2.7和Python 3.2上)我得到错误:

socket.error:[Errno 111]连接被拒绝

pymysql.err.OperationalError:(2003,"无法连接到'localhost'上的MySQL服务器'(111)")

我确定mysqld正在运行,因为我可以使用mysql命令或phpMyAdmin 进行连接.而且,我可以使用几乎相同的代码在Python 2上使用MySQLdb进行连接:

import MySQLdb
conn = MySQLdb.connect(db='base', user='root', passwd='pwd', host='localhost')
Run Code Online (Sandbox Code Playgroud)

似乎问题出在PyMySQL方面而不是MySQL上,但我不知道如何解决它.

Rec*_*nic 55

两个猜测:

  1. 运行mysqladmin variables | grep socket以获取套接字所在的位置,并尝试设置如下连接:

    pymysql.connect(db='base', user='root', passwd='pwd', unix_socket="/tmp/mysql.sock")
    
    Run Code Online (Sandbox Code Playgroud)
  2. 运行mysqladmin variables | grep port并验证端口是3306.如果没有,您可以手动设置端口,如下所示:

    pymysql.connect(db='base', user='root', passwd='pwd', host='localhost', port=XXXX)
    
    Run Code Online (Sandbox Code Playgroud)

  • 使用`/ var/run/mysqld/mysqld.sock`就可以了.谢谢!(赏金21小时) (4认同)
  • 但是,它需要一些奇怪的东西.我想知道你的`my.cnf`文件是否配置不正确.我猜测端口配置不正确,MySQLdb足够聪明,可以尝试使用套接字而不是TCP.(一些讨论[这里](http://dev.mysql.com/doc/refman/5.5/en//connecting.html),他们谈论`--protocol`) (3认同)
  • 我实际上还没有`my.cnf`文件-但是PHP似乎能够弄清楚`localhost`应该成为那个文件。我更喜欢使用.sock`s :) (2认同)

Bra*_*orm 9

似乎更改localhost127.0.0.1修复错误,至少在我的配置中.如果没有,我会查找错误tcp sockets connection,当然,将其作为bugtrack中的pymysql错误发布.

  • 我尝试使用'127.0.0.1'或我的主机名,但结果是相同的...... (4认同)
  • 这对我来说也没有解决. (3认同)

小智 5

我通过更换解决的问题,localhost127.0.0.1和更改密码,以我的MySQL数据库的密码,如下图所示;

conn = pymysql.connect(
    host = '127.0.0.1',
    port = 3306,
    user = 'root',
    passwd = 'XXXXXXXXX',
    db = 'mysql'
)
Run Code Online (Sandbox Code Playgroud)