我正在尝试使用PyMySQL连接到localhost上的MySQL:
import 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'上的MySQL服务器'(111)”)
我确定mysqld正在运行,因为我可以使用 mysql 命令或phpMyAdmin进行连接。而且,我可以使用几乎相同的代码在Python 2上使用MySQLdb进行连接:
import MySQLdb
conn = MySQLdb.connect(db='base', user='root', passwd='pwd', host='localhost')
似乎问题出在PyMySQL方面而不是MySQL上,但我不知道如何解决它。
答案 0 :(得分:47)
两个猜测:
运行mysqladmin variables | grep socket
以获取套接字的位置,并尝试设置如下连接:
pymysql.connect(db='base', user='root', passwd='pwd', unix_socket="/tmp/mysql.sock")
运行mysqladmin variables | grep port
并验证端口是3306.如果没有,您可以手动设置端口,如下所示:
pymysql.connect(db='base', user='root', passwd='pwd', host='localhost', port=XXXX)
答案 1 :(得分:9)
似乎将localhost
更改为127.0.0.1
可以修复错误,至少在我的配置中是这样。
如果没有,我会在tcp sockets connection
中查找错误,当然,将其作为pymysql
错误跟踪中的错误发布。
答案 2 :(得分:5)
我通过将localhost
替换为127.0.0.1
并将密码更改为我的MYSQL数据库密码来解决了这个问题,如下所示;
conn = pymysql.connect(
host = '127.0.0.1',
port = 3306,
user = 'root',
passwd = 'XXXXXXXXX',
db = 'mysql'
)
答案 3 :(得分:1)
我遇到了同样的问题,我的解决方法如下。
答案 4 :(得分:0)
您还需要将端口添加到连接中。试试这个,它工作正常。
sed '/version: /{h;s/.*\( [0-9]*\)/echo $((\1+1))/e;x;s/ .*//;G;s/\n/ /}' infile
答案 5 :(得分:0)
I asked why socket worked but not TCP,答案是bind-address
中的/etc/my.cnf
设置不正确。这也可能是您的问题,因为套接字方法可以正常工作,而TCP方法却不能。
答案 6 :(得分:0)
那些努力从dockerized flask-sqlalchemy或使用pymysql连接本地主机MySQL的人,请调查此线程,非常有用How to connect locally hosted MySQL database with the docker container
答案 7 :(得分:0)
这对我有用:
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';