pymysql无法连接mysql

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

我正在尝试使用pymsql连接到MySQL数据库,主机是'115.28.236.225',并使用默认端口:3306。代码如下(db_connect.py):

import pymysql

def connDB():
    conn=pymysql.connect(host='115.28.236.225',user='root',passwd='xxx',db='yyy',charset='utf8', port=3306)
    cur=conn.cursor();
    return (conn,cur);

conn,cur=connDB()

我使用

python db_connect.py
来运行,但是,我收到错误消息
pymysql.err.OperationalError: (1045, u"Access denied for user 'root'@'58.196.159.221' (using password: YES)")
,我不知道主机'58.196.159.221'来自哪里,与代码中的主机不对应。

(我尝试使用MySql Workbench连接MySQL,并且成功了,所以,我确信这一定是python代码有问题)。

我该如何解决这个问题?预先感谢!

python mysql
3个回答
7
投票

pymysql 很棒,因为它是纯粹用 python 实现的 - 没有外部依赖。

我敢打赌,您没有从外部来源为

root
帐户设置适当的权限。 你看到
pymysql.err.OperationalError: (1045,u"Access denied for user 'root'@'58.196.159.221'
的原因是因为你可能只能从
'root'@'localhost'
访问 mysql,
58.196.159.221
是你的 python 程序运行的系统的 IP 地址 - 不相信我?运行
ifconfig
并检查您的 IP 地址。

修复: 连接到

mysql
控制台并运行以下命令:

GRANT ALL ON root.* TO 'root'@'58.196.159.221' IDENTIFIED BY 'ENTER_PASSWORD_HERE' ;
FLUSH PRIVILEGES;

这将允许远程访问 mysql。

如果您只想从本地主机访问 mysql,您可以运行以下命令:

GRANT ALL ON root.* TO 'root'@'localhost' IDENTIFIED BY 'ENTER_PASSWORD_HERE' ;
FLUSH PRIVILEGES;

如果您想授予任何 IP 地址的访问权限:

GRANT ALL ON root.* TO 'root'@'%' IDENTIFIED BY 'ENTER_PASSWORD_HERE' ;
FLUSH PRIVILEGES;

FLUSH PRIVILEGES 从 mysql 数据库重新加载权限,这在更改用户权限后是必需的。


1
投票

58.196.159.221很可能是运行脚本的客户端的地址。它没有权限访问您的远程数据库;您必须在 MySQL 本身中进行配置。


0
投票

我遇到了完全相同的问题,相同的凭据在 MySQL Workbench 中有效,但在同一台计算机上的

pymysql.connect()
中无效。

就我而言,通过了

ssl_verify_identity=True

参数修复了

pymysql.err.OperationalError: (1045, u"Access denied for user 'your-user'@'your-ip' (using password: YES)")
错误:

connection = pymysql.connect(
    host=host,
    port=port,
    user=user,
    password=password,
    db=db_name,
    ssl_verify_identity=True,
)
© www.soinside.com 2019 - 2024. All rights reserved.