我尝试使用以下方法从 Python 3.3 访问 MySQL:
import mysql.connector
config = {
'user': '###',
'password': '******',
'host': '##.##.#.##',
'database': '########',
'port': '####',
'raise_on_warnings': True,
}
cnx = mysql.connector.connect(**config)
cnx.close()
Run Code Online (Sandbox Code Playgroud)
但是当我运行上面的代码时,我收到了这个错误:
mysql.connector.errors.ProgrammingError: 1045 (28000): Access denied for user '###'@'##.##.#.###' (using password: YES);
Run Code Online (Sandbox Code Playgroud)
为什么我会收到此错误,我该如何解决?
Jia*_* Li 10
我想为原因添加另一种可能性:您的 MySQL 和mysql-connector-python. 当我使用 MySQL5.6.24-72.2-log和mysql-connector-python==8.0.13. 降级以mysql-connector-python==8.0.5解决问题。虽然我使用的是 Python 2,但希望这能为调试提供更多线索。
这意味着 MySQL 由于以下原因之一拒绝了连接:
MySQL 的用户实际上是用户和连接模式的组合。例如'user'@'10.0.23.99'或'test'@'%'或'fred'@'196.168.123.%'或'mary'@'%.example.com'
使用 MySQL 客户端,检查“mysql”数据库中的“user”表,以查看 MySQL 知道哪些用户以及可以从哪些主机进行连接。
例如
mysql> SELECT user, host FROM mysql.user WHERE user = 'youruser';
Run Code Online (Sandbox Code Playgroud)
查看 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 进行连接。为此,只需省略主机和端口参数即可。