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

如何阻止pymysql或mysql.connector将localhost解析为IPv6?

解决Python连接MySQL时Access denied for user 'user_name'@'::1'的问题

一、阻止localhost解析为IPv6的方法

修改服务器的/etc/hosts文件,调整localhost的解析优先级:

  • 用sudo权限打开/etc/hosts
  • 将127.0.0.1 localhost放在::1 localhost之前,或者直接注释掉IPv6的映射行:
    # ::1     localhost ip6-localhost ip6-loopback
    127.0.0.1 localhost
    
  • 保存后立即生效,系统会优先用IPv4解析localhost

二、无需修改解析的替代方案

1. 使用Unix套接字连接(推荐)

PHP连接localhost默认走Unix套接字而非TCP/IP,这是它能正常连接的核心原因。Python的MySQL库也支持指定套接字路径,绕过TCP/IP解析环节:

  • 先向服务商确认MySQL的套接字路径(常见路径如/var/run/mysqld/mysqld.sock或/tmp/mysql.sock)
  • 修改连接代码:
    针对mysql.connector:
    conn = mysql.connector.connect(
        host='localhost',
        user='user_name',
        password='password',
        database='db_name',
        unix_socket='/var/run/mysqld/mysqld.sock'  # 替换为实际路径
    )
    
    针对pymysql:
    conn = pymysql.connect(
        host='localhost',
        user='user_name',
        passwd='password',
        db='db_name',
        unix_socket='/var/run/mysqld/mysqld.sock'  # 替换为实际路径
    )
    

2. 强制客户端使用IPv4

部分MySQL客户端库支持强制IPv4连接,避免解析到IPv6:

  • 对于mysql.connector,添加force_ipv4=True参数(需确认库版本支持):
    conn = mysql.connector.connect(
        host='localhost',
        user='user_name',
        password='password',
        database='db_name',
        force_ipv4=True
    )
    

三、向服务商询问的关键点

  • 提供MySQL服务的Unix套接字具体路径
  • 是否可以为user_name账号添加user_name@'::1'或user_name@'127.0.0.1'的访问权限
  • 明确要求使用localhost连接的具体原因,是否涉及特定配置限制

内容的提问来源于stack exchange,提问作者mgolunski

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 14:15:01