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
相关产品推荐
相关产品推荐

