Python连接MySQL时出现ConnectionRefusedError(10061)错误的原因及解决方法
Python连接MySQL时出现ConnectionRefusedError(10061)错误的原因及解决办法
我之前也碰到过一模一样的问题,别慌,咱们一步步来排查可能的原因,对应解决就行:
常见原因及解决方法
1. MySQL服务根本没启动
这是最常见的原因!你的本地MySQL服务器都没跑起来,Python自然连不上。
- 排查方法:Windows按
Win+R输入services.msc,在服务列表里找MySQL相关的服务(比如MySQL80,名字可能因版本不同而异),看状态是不是“正在运行”。 - 解决办法:如果没运行,右键点击“启动”;也可以用命令行(管理员身份)启动:
net start MySQL80(把MySQL80换成你的实际服务名)。要是服务列表里找不到MySQL,那可能是MySQL没安装好,得重新安装。
2. 端口号不匹配
你代码里用的是默认的3306端口,但如果MySQL配置了其他端口(比如3307),就会连接被拒。
- 排查方法:找到MySQL的配置文件
my.ini(一般在MySQL安装目录的data或my文件夹里),搜索port字段,看实际端口是多少。 - 解决办法:如果端口不是3306,就在Python代码的
connect里加上port="你的端口号",比如:
mydb = mysql.connector.connect( host = "localhost", user = "root", password = "xxxxx", database='xxxxx', port=3307 # 换成你的实际端口 )
3. 本地主机解析问题
有时候localhost的解析会出问题,换成127.0.0.1试试,这是本地回环地址,更直接。
- 解决办法:把代码里的
host = "localhost"改成host = "127.0.0.1"再试。
4. 防火墙拦截了连接
Windows防火墙或者第三方杀毒软件的防火墙,可能把3306端口的连接请求给拦了。
- 排查方法:暂时关闭防火墙,然后重新运行代码,如果能连上了,就说明是防火墙的问题。
- 解决办法:给MySQL服务或者你的Python程序添加防火墙允许规则,或者手动开放3306端口的入站和出站权限。
5. MySQL配置限制了本地连接
- 情况一:MySQL的
bind-address设置成了其他IP,导致不接受本地连接。- 解决:打开
my.ini,把bind-address改成127.0.0.1(只允许本地连)或者0.0.0.0(允许所有IP连),然后重启MySQL服务。
- 解决:打开
- 情况二:你的MySQL账号没有本地连接的权限(比如账号只能远程登录)。
- 解决:登录MySQL客户端,执行以下命令给
root账号添加本地权限:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '你的密码'; FLUSH PRIVILEGES; - 解决:登录MySQL客户端,执行以下命令给
额外小提示
你可以先在MySQL客户端(比如MySQL Workbench、Navicat)用和代码里一样的host、用户名、密码、数据库名连接试试,如果客户端都连不上,那问题肯定在MySQL本身或者配置上,先把客户端连接问题解决了,再试Python代码就容易多了。
备注:内容来源于stack exchange,提问作者Shreeyansh Singh Sajwan




