Python连接MySQL报localhost:3306 10061及数据库已加载错误如何解决
报错核心说明
你遇到的mysql.connector.errors.DatabaseError: 2003 (HY000): Can't connect to MySQL server on 'localhost:3306' (10061)错误属于网络连接层错误,Python进程无法和本地3306端口的MySQL服务建立TCP连接,错误触发阶段还没到校验账号密码、数据库权限的步骤。
常见报错原因
- MySQL服务未启动:大部分系统下MySQL默认不会配置开机自启,服务未运行时不会监听3306端口
- MySQL监听配置异常:如果配置文件设置了
skip-networking跳过网络连接,或者bind-address绑定了非本地IP,会导致localhost无法连接 - 端口配置错误:安装MySQL时手动修改了默认端口,或者3306端口被其他程序占用
- 本地防火墙拦截:系统防火墙拦截了本地进程访问3306端口的请求
- hosts映射错误:本地hosts文件中localhost没有正确指向127.0.0.1,导致请求发往错误地址
排查解决步骤
- 检查MySQL服务运行状态
- Windows:按下
Win+R输入services.msc打开服务列表,找到MySQL开头的服务,若状态为未运行,右键点击「启动」即可,需要开机自启可修改属性中的启动类型为「自动」 - Linux:执行
sudo systemctl status mysql(部分发行版服务名为mysqld),若显示inactive,执行sudo systemctl start mysql启动服务,设置开机自启执行sudo systemctl enable mysql - macOS:执行
sudo mysql.server status查看状态,未运行的话执行sudo mysql.server start启动
- 验证端口和监听配置
执行端口查询命令:
- Windows:
netstat -ano | findstr 3306 - Linux/macOS:
netstat -tulnp | grep 3306
如果没有任何输出,说明MySQL未监听网络端口:打开MySQL配置文件(my.ini/my.cnf),删除skip-networking配置项,将bind-address设置为127.0.0.1,修改完成后重启MySQL服务。
如果查询到的监听端口不是3306,需要在代码连接时新增port=实际端口参数,示例如下:
cnx = mysql.connector.connect(user='admin', password='admin', host='localhost', port=3307, database='sciencefair')
- 排查防火墙和hosts配置
暂时关闭本地防火墙后测试连接,如果连接成功,手动添加防火墙规则放行3306端口的本地请求即可。
打开本地hosts文件(Windows路径C:\Windows\System32\drivers\etc\hosts,Linux/macOS路径/etc/hosts),确认存在以下两行映射,缺失则手动添加后保存:
127.0.0.1 localhost ::1 localhost
- 兼容性测试
如果上述操作完成后仍报错,可以将代码中的host='localhost'修改为host='127.0.0.1'测试,避免部分环境下localhost优先走Unix socket连接导致的兼容性问题。
内容的提问来源于stack exchange,提问作者Dude Hexafandra
相关产品推荐
相关产品推荐

