PyMySQL无法连接到本地MySQL
我正在尝试使用 PyMySQL 连接到本地的 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,但我不知道该怎么解决。
11 个回答
9
我解决这个问题的方法是把 localhost
换成 127.0.0.1
,然后把密码改成我MYSQL数据库的密码,具体如下:
conn = pymysql.connect(
host = '127.0.0.1',
port = 3306,
user = 'root',
passwd = 'XXXXXXXXX',
db = 'mysql'
)
13
看起来把 localhost
改成 127.0.0.1
可以解决这个错误,至少在我的设置中是这样。如果还是不行,我会检查一下 tcp sockets connection
方面的错误,当然,也可以把这个问题作为bug提交到 pymysql
的问题追踪系统里。
80
有两个猜测:
运行
mysqladmin variables | grep socket
来查看 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)