PyMySQL无法在localhos上连接到MySQL

2024-04-29 01:24:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用PyMySQL连接到本地主机上的MySQL:

import pymysql
conn = pymysql.connect(db='base', user='root', passwd='pwd', host='localhost')

但是(在Python2.7和Python3.2上)我得到了一个错误:

socket.error: [Errno 111] Connection refused

pymysql.err.OperationalError: (2003, "Can't connect to MySQL server on 'localhost' (111)")

我确信mysqld正在运行,因为我可以使用mysql命令或phpMyAdmin进行连接。此外,我可以在Python 2上使用MySQLdb连接,代码几乎相同:

import MySQLdb
conn = MySQLdb.connect(db='base', user='root', passwd='pwd', host='localhost')

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


Tags: importlocalhosthostdbbaseconnectpwdmysql
3条回答

我用127.0.0.1替换localhost,并将密码更改为MYSQL数据库密码,解决了这个问题,如下所示

conn = pymysql.connect(
    host = '127.0.0.1',
    port = 3306,
    user = 'root',
    passwd = 'XXXXXXXXX',
    db = 'mysql'
)

似乎将localhost更改为127.0.0.1可以修复错误,至少在我的配置中是这样。 如果没有,我会在tcp sockets connection中查找错误,当然,还会在pymysql错误跟踪中将其作为错误发布。

两个猜测:

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

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

    pymysql.connect(db='base', user='root', passwd='pwd', host='localhost', port=XXXX)
    

相关问题 更多 >