我尝试使用以下方法从Python 3.3访问MySQL:
import mysql.connector
config = {
'user': '###',
'password': '******',
'host': '##.##.#.##',
'database': '########',
'port': '####',
'raise_on_warnings': True,
}
cnx = mysql.connector.connect(**config)
cnx.close()
但是当我运行上面的代码时,我收到了这个错误:
mysql.connector.errors.ProgrammingError: 1045 (28000): Access denied for user '###'@'##.##.#.###' (using password: YES);
为什么我会收到此错误,我该如何解决?
答案 0 :(得分:2)
这意味着MySQL出于以下原因之一拒绝了连接:
MySQL的用户实际上是用户和可以连接的模式的组合。例如'用户' @' 10.0.23.99'或者'测试'%'%'或者' fred' @' 196.168.123。%'或者' @'%。example.com'
使用MySQL客户端,检查"用户"表中的" mysql"数据库,以查看MySQL知道的用户以及可以连接的主机。
e.g。
mysql> SELECT user, host FROM mysql.user WHERE user = 'youruser';
查看MySQL文档以了解如何添加用户。另请参阅如何授予对不同表等的访问权限。
http://dev.mysql.com/doc/refman/5.5/en/adding-users.html
http://dev.mysql.com/doc/refman/5.5/en/grant.html
鉴于你的匿名IP地址看起来一样,我想你可能在运行MySQL的同一台机器上运行你的Python代码。如果是这样,您可能会发现您正在使用服务器的外部IP地址,而MySQL可能配置为仅接受来自localhost / 127.0.0.1的连接。如果是这样,请尝试更改您要连接的IP地址。此外,通常如果您在数据库服务器上运行,则可以通过Unix域套接字而不是通过TCP / IP进行连接。为此,请省略主机和端口参数。
答案 1 :(得分:2)
对我来说,它正在固定正确的端口(安装时已更改默认端口,因为它已被使用)。
答案 2 :(得分:1)
我收到此错误是因为我的配置文件中有引号。
[mysql]
username: 'uuuu'
password: 'pppp'
host: 'localhost'
database: 'dddd'
给了我错误。但是,删除引号有效:
[mysql]
username: uuuu
password: pppp
host: localhost
database: dddd
答案 3 :(得分:1)
我想为原因添加另一种可能性:MySQL和mysql-connector-python
之间的版本不匹配。当我使用MySQL 5.6.24-72.2-log
和mysql-connector-python==8.0.13
时,这个问题发生在我身上。降级为mysql-connector-python==8.0.5
解决了该问题。尽管我使用的是Python 2,但希望这会为调试提供更多线索。
答案 4 :(得分:1)
我在完成同一任务时遇到很多麻烦。这是对我有用的东西:
我必须使用旧版密码加密选项(与MySQL 5.x兼容)来初始化新数据库:
Database initialization options screenshot
一旦我这样做,一切都会很好。我从这篇文章中得到了这个建议:
以下是一些规格:
答案 5 :(得分:1)
当我尝试将数据从python脚本传输到Raspberry Pi上的MySQL数据库时,我遇到了这个问题。
最初安装MySQL时,它将使用您输入的任何密码将您设置为用户“ root”。如果您随后更改了安全设置以具有强密码(如我一样),则密码必须具有大写,小写,数字和特殊字符。
这可能是您尝试连接到数据库时抛出的错误。
要对此进行补救:
登录到MySQL:
sudo mysql --user=root
删除root用户:
DROP USER 'root'@'localhost';
创建一个新用户:
CREATE USER 'root'@'localhost' IDENTIFIED BY 'password';
授予用户所有权限:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
答案 6 :(得分:0)
尝试使用mysql命令行客户端:
mysql -h ##.##.#.## -P #### -u ### -p ########
答案 7 :(得分:0)
您需要从MySQL向root用户授予权限,正如您的异常消息所述。首先,您从命令行或您喜欢的MySQL客户端(例如MySQL工作台)登录MySQL。然后您授予您的用户权限(在本例中为root)。此link描述了如何从控制台登录MySQL,例如
mysql -h localhost -u root -p
然后您需要向用户root授予权限,例如
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password';
使用密码为从任何主机(%
)到root的所有数据库提供完全权限。如果在授予权限时可以从Internet访问此服务器,则需要小心。