Python PyMySQL可以';无法连接到本地主机上的MySQL
我正在尝试使用PyMySQL连接到本地主机上的MySQL:Python PyMySQL可以';无法连接到本地主机上的MySQL,python,mysql,mysql-error-2003,Python,Mysql,Mysql Error 2003,我正在尝试使用PyMySQL连接到本地主机上的MySQL: 导入pymysql conn=pymysql.connect(db='base',user='root',passwd='pwd',host='localhost') 但是(在Python 2.7和Python 3.2上)我得到了错误: socket.error:[Errno 111]连接被拒绝 pymysql.err.OperationalError:(2003,“无法连接到'localhost'(111)上的MySQL服务器” 我
导入pymysql
conn=pymysql.connect(db='base',user='root',passwd='pwd',host='localhost')
但是(在Python 2.7和Python 3.2上)我得到了错误:
socket.error:[Errno 111]连接被拒绝
pymysql.err.OperationalError:(2003,“无法连接到'localhost'(111)上的MySQL服务器”
我确信mysqld正在运行,因为我可以使用mysql命令或phpMyAdmin进行连接。此外,我可以在Python 2上使用MySQLdb进行连接,代码几乎相同:
导入MySQLdb
conn=MySQLdb.connect(db='base',user='root',passwd='pwd',host='localhost')
问题似乎出在PyMySQL方面,而不是MySQL方面,但我不知道如何解决它。似乎将
localhost
更改为127.0.0.1
修复了错误,至少在我的配置中是这样。
如果没有,我会在tcp套接字连接中查找错误,当然,也会将其作为错误发布在pymysql
错误跟踪中。两种猜测:
运行mysqladmin variables | grep socket
获取套接字的位置,然后尝试设置如下连接:
pymysql.connect(db='base', user='root', passwd='pwd', unix_socket="/tmp/mysql.sock")
运行mysqladmin变量| grep port
并验证端口是否为3306。如果没有,您可以手动设置端口,如下所示:
pymysql.connect(db='base', user='root', passwd='pwd', host='localhost', port=XXXX)
我通过将localhost
替换为127.0.0.1
并将密码更改为我的MYSQL数据库密码解决了这个问题,如下所示
conn = pymysql.connect(
host = '127.0.0.1',
port = 3306,
user = 'root',
passwd = 'XXXXXXXXX',
db = 'mysql'
)
您还需要将端口添加到连接中。试试这个,效果很好
pymysql(Module Name).connect(host="localhost", user="root", passwd="root", port=8889, db="db_name")
我遇到了同样的问题,我的解决方案如下:
运行ssh-fN-l3307:mysql\u主机:3306ssh_user@ssh_host
在我的终端中
conn=pymysql.connect(db='base',user='root',passwd='pwd',host='localhost')
发生此错误的原因是数据库不支持直接链接。答案是
/etc/my.cnf
中的绑定地址设置不正确。这也可能是您的问题,因为套接字方法可以正常工作,但TCP方法不行。那些正在从Dockered flask sqlalchemy或使用pymysql连接本地主机MySQL的人,请查看此线程,非常有用。这对我来说很有用:
import pymysql
db = pymysql.connect(host="localhost",port=8889,user="root",passwd="root")
cursor=db.cursor()
cursor.execute("SHOW DATABASES")
results=cursor.fetchall()
for result in results:
print (result)
如果要查找端口#请转到终端中的mysql,然后键入:
SHOW VARIABLES WHERE Variable_name = 'hostname';
SHOW VARIABLES WHERE Variable_name = 'port';
这也没有为我解决问题。我也有类似的问题,但使用sqlalchemy-->pymysql-->mysql可以使用命令行(mysql-h localhost)很好地连接。。。。因此,它确实似乎暗示了PyMySql有点奇怪,尽管它是需要的。我想知道您的my.cnf
文件是否配置不正确。我猜端口配置不正确,MySQLdb足够聪明,可以尝试使用套接字而不是TCP。(在一些讨论中,他们讨论了--协议)我实际上还没有得到我的.cnf
文件,但PHP似乎能够弄明白本地主机应该变成这样。我更喜欢使用.sock
s,不过:)我真的很想知道为什么通过套接字连接可以工作,而不是localhost
。我的意思是,adminer和mysql命令行都可以很好地使用凭据…已经搜索了几天的答案,您的答案最终解决了我的问题:欢迎使用SO!在回答问题之前,请务必阅读现有答案。已经提供了这个答案。与其重复答案,不如投票支持现有答案。在这里可以找到一些写好答案的指南