使用Python连接MySQL报错111 Connection Refused求助
解决MySQL连接报错'2003: Can't connect to MySQL server on 'localhost:3306' (111 Connection refused)'
针对你遇到的问题——Python脚本无法连接本地MySQL但phpMyAdmin正常访问,以下是几个可行的排查和解决步骤:
1. 确认MySQL是否开启TCP/IP监听
phpMyAdmin通常默认使用Unix Socket连接,而你的Python脚本尝试通过TCP/IP连接。先检查MySQL是否在监听3306端口:
- 执行终端命令:
如果输出里没有sudo netstat -tulpn | grep mysql127.0.0.1:3306或0.0.0.0:3306的记录,说明MySQL没开启TCP/IP监听。 - 修改MySQL配置文件(路径可能是
/etc/mysql/mysql.conf.d/mysqld.cnf或/etc/my.cnf),找到bind-address配置项,设置为127.0.0.1,然后重启MySQL服务:sudo systemctl restart mysql
2. 改用Unix Socket连接
既然phpMyAdmin能正常访问,说明Socket连接是可用的。修改Python脚本,指定Socket路径:
import mysql.connector from mysql.connector import Error def conect_test(user_name, user_password): connection = None try: # 替换为你实际的Socket路径,可在phpMyAdmin「服务器信息」中查看「Unix socket」值 connection = mysql.connector.connect( unix_socket='/var/run/mysqld/mysqld.sock', user=user_name, passwd=user_password, use_pure=True ) print("MySQL Database connection successful") except Error as err: print(f"Erro: '{err}'") return connection
3. 移除use_pure=True参数
use_pure=True强制使用纯Python驱动,可能存在兼容性问题。尝试去掉该参数:
connection = mysql.connector.connect( host=host_name, user=user_name, passwd=user_password )
4. 验证函数调用参数
确保调用conect_test时传入的主机、用户名、密码和phpMyAdmin使用的完全一致,比如:
# 示例调用,替换为你的实际账号信息 conn = conect_test('localhost', 'root', 'your_db_password')
内容的提问来源于stack exchange,提问作者Rodrigo Oliveira
相关产品推荐
相关产品推荐

