pymysql无法连接到mysql

时间:2015-12-26 16:33:58

标签: python mysql

我正在尝试使用pymsql连接到MySQL db,主机是'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代码一定有问题。)

我该如何解决这个问题?提前谢谢!

3 个答案:

答案 0 :(得分:5)

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 :(得分:0)

试试这个:

#!/usr/bin/python
import MySQLdb

db = MySQLdb.connect(host="115.28.236.225", user="root", passwd="xxx", db="yyy")      

cur = db.cursor()

cur.execute("SELECT * FROM YOUR_TABLE_NAME")

for row in cur.fetchall():
    print row[0]

db.close()

答案 2 :(得分:0)

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