如何防止 pymysql(或 mysql.connector)将 localhost 解析为 IPv6?

问题描述 投票:0回答:1

我正在尝试从托管提供商服务器上的 Python 连接到 MySQL。我已经创建了数据库,我可以通过 SSH 和 PHP 连接到它。当我尝试使用 Python 连接时,出现错误

Access denied for user 'user_name'@'::1' (using password: YES)

我认为这可能是由于 Python 将 localhost 解析为 IPv6。我的用户可能没有 [::1] 或 127.0.0.1 上的访问权限,只能在 localhost 上访问。是否可以阻止这种行为?

如果不是,我可以尝试什么或者我应该向我的主机询问什么来连接到数据库?

我尝试了 pymysql 和 mysql.connector ,结果相同。

我尝试将主机更改为 127.0.0.1 或 [::1]。我的主机明确表示我应该与本地主机连接。

我的简短测试脚本:

import os
import sys
import pymysql
pymysql.install_as_MySQLdb()
import mysql.connector


sys.path.insert(0, os.path.dirname(__file__))


def application(environ, start_response):
    start_response('200 OK', [('Content-Type', 'text/plain')])
    message = 'It works!\n'
    version = 'Python v' + sys.version.split()[0] + '\n'
    
    conn_message = ''
    
    
    conn = mysql.connector.connect(host='localhost', user='user_name', password='password', database='db_name', port=3306)
    # conn = pymysql.connect(host='localhost', user='user_name', passwd='password', db='db_name', port=3306)
    
    if conn:
        conn_message = 'MySQL: Yes :)'
    else:
        conn_message = 'MySQL: No :('

    conn.close()

    response = '\n'.join([message, version, conn_message])
    return [response.encode()]

mysql python-3.x pymysql mysql-connector-python
1个回答
0
投票

您可以使用

更新用户表
UPDATE mysql.user SET host = 'localhost' WHERE user = 'user_name'

localhost 首先尝试打开套接字,然后尝试打开 tco/ip 连接。

但您的提供似乎不允许 tcp/ip 连接。

© www.soinside.com 2019 - 2024. All rights reserved.