You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python使用MySQLdb连接IPv6服务器报错(2005)求助

解决MySQLdb连接IPv6地址(::1)报Unknown Host错误的方法

我之前也碰到过一模一样的问题,折腾了好一会儿才搞定,给你整理几个靠谱的解决思路:

1. 先确认MySQL服务器是否开启了IPv6监听

这是最常见的原因——你的MySQL可能压根没在IPv6地址上监听请求:

  • 找到MySQL的配置文件(Linux一般是/etc/my.cnf或/etc/mysql/my.cnf,Windows是my.ini),找到bind-address配置项:
    • 如果当前值是127.0.0.1(只监听IPv4),把它改成::(表示监听所有IPv6地址,同时兼容IPv4)或者::1(仅监听本地IPv6)
    • 注意:部分版本的MySQL设置bind-address=0.0.0.0也会同时监听IPv6,但直接设成::更稳妥
  • 改完配置后重启MySQL服务:Linux执行sudo systemctl restart mysqld,Windows可以在服务管理器里重启
  • 验证监听状态:执行netstat -tulnp | grep mysqld,如果看到:::3306的记录,说明IPv6监听已经正常开启

2. 调整连接字符串的IPv6格式

旧版本的MySQLdb对IPv6地址的解析有bug,需要把地址用方括号括起来:
把你的连接代码改成:

MySQLdb.connect(host='[::1]', user='admin', passwd='123456', db='test', port=3306)

特意加上port=3306是为了避免端口解析异常,确保连接到正确的MySQL端口。

3. 升级MySQLdb(或替换成mysqlclient/pymysql)

MySQLdb本身已经停止维护,现在官方替代是mysqlclient,它对IPv6的支持更完善:

  • 先卸载旧的MySQLdb:pip uninstall MySQL-python
  • 安装mysqlclient:pip install mysqlclient
  • 之后用原代码(甚至不用方括号直接写host='::1')就能正常连接

如果升级后还是有问题,换成pymysql也是个好选择——它是纯Python实现的MySQL客户端,对IPv6支持更友好:

import pymysql
conn = pymysql.connect(host='::1', user='admin', password='123456', database='test')

4. 验证本地IPv6环境是否正常

有时候问题出在系统本身的IPv6配置:

  • 执行ping6 ::1,如果能正常收到响应,说明本地IPv6是启用的;如果不通,需要先开启系统的IPv6支持
  • 检查防火墙规则,确保没有阻止IPv6的3306端口(Linux用ip6tables -L查看,Windows在防火墙高级设置里检查)

按这个顺序排查,基本能解决问题。

内容的提问来源于stack exchange,提问作者king. li

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:17:11