PyMySQL无法连接到本地MySQL

48 投票
11 回答
173229 浏览
提问于 2025-04-16 22:35

我正在尝试使用 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

有两个猜测:

  1. 运行 mysqladmin variables | grep socket 来查看 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)
    

撰写回答