无法用Python连接MySQL的问题求助(M1 Mac环境)
Python MySQL连接报错:2003 Can't connect to MySQL server on 'localhost:3306'
问题代码
if __name__ == '__main__': print_hi('PyCharm') print("Connecting to database.") mysqldb = mysql.connector.connect( host="localhost", user="username", password="password" ) print(mysqldb)
报错信息
mysql.connector.errors.InterfaceError: 2003: Can't connect to MySQL server on 'localhost:3306' (61 Connection refused).
已知情况
- 终端可通过
mysql -u username -p正常连接MySQL - 执行
netstat -tln | grep 3306无返回结果 - MySQL全局端口变量查询结果:
mysql> show global variables like '%port%'; +--------------------------+-------+ | Variable_name | Value | +--------------------------+-------+ | admin_port | 33062 | | large_files_support | ON | | mysqlx_port | 33060 | | mysqlx_port_open_timeout | 0 | | port | 0 | | report_port | 0 |
select @@skip_networking;返回结果为1- 环境:M1 Mac
原因分析
skip_networking=1说明MySQL禁用了TCP/IP网络连接,仅允许通过本地套接字(socket)连接。- 终端能正常连接是因为默认使用本地套接字,而
mysql.connector默认尝试通过TCP/IP连接localhost:3306,因此被拒绝。 port=0进一步印证了MySQL未监听任何TCP端口。
解决办法
方法一:修改Python代码,使用本地套接字连接
先获取MySQL本地套接字的准确路径,执行终端命令:
mysql -u username -p -e "show variables like 'socket'"
通常M1 Mac上的路径可能是/tmp/mysql.sock或/opt/homebrew/var/mysql/mysql.sock(Homebrew安装的MySQL)。
修改连接代码,添加unix_socket参数:
mysqldb = mysql.connector.connect( user="username", password="password", unix_socket="/tmp/mysql.sock" # 替换为实际获取的套接字路径 )
方法二:开启MySQL的TCP/IP连接
如果需要通过TCP/IP协议连接,修改MySQL配置文件:
- 找到配置文件:Homebrew安装的MySQL通常在
/opt/homebrew/etc/my.cnf或/usr/local/etc/my.cnf,也可能是/etc/my.cnf。 - 在
[mysqld]段落添加或修改以下配置:
skip_networking=0 port=3306
- 重启MySQL服务:
- Homebrew安装:
brew services restart mysql - 其他安装方式:根据系统执行对应重启命令(如
sudo systemctl restart mysql)。
- Homebrew安装:
- 验证:执行
netstat -tln | grep 3306能看到端口监听,此时原Python代码的host="localhost"即可正常连接。
内容的提问来源于stack exchange,提问作者Sriram
相关产品推荐
相关产品推荐

