从Python 3访问MySQL:用户访问被拒绝
我尝试通过以下方法从Python 3.3访问MySQL:从Python 3访问MySQL:用户访问被拒绝,python,mysql,Python,Mysql,我尝试通过以下方法从Python 3.3访问MySQL: import mysql.connector config = { 'user': '###', 'password': '******', 'host': '##.##.#.##', 'database': '########', 'port': '####', 'raise_on_warnings': True, } cnx = mysql.connector.connect(**config) cnx.
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);
为什么会出现此错误?如何修复此错误?这意味着MySQL由于以下原因之一拒绝了连接:
鉴于您的匿名IP地址看起来是一样的,我想您可能正在运行MySQL的同一台机器上运行Python代码。如果是这样,您可能会发现您正在使用服务器的外部IP地址,而MySQL可能被配置为只接受来自localhost/127.0.0.1的连接。如果是这样,请尝试更改您要连接的IP地址。另外,如果您在数据库服务器上运行,通常可以通过Unix域套接字而不是TCP/IP进行连接。要做到这一点,只需省去主机和端口参数。在mysql命令行客户端上尝试同样的方法:
mysql -h ##.##.#.## -P #### -u ### -p ########
正如您的异常消息所说,您需要从MySQL向根用户授予特权。首先,您可以从命令行或您最喜欢的MySQL客户端(如MySQL workbench)登录MySQL,然后向您的用户(本例中为root用户)授予权限。这描述了如何从控制台登录MySQL,例如
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password';
mysql-h localhost-u root-p
然后您需要向root用户授予权限,例如
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password';
它使用密码为任何主机(
%
)的所有数据库授予root用户的完全权限。如果在授予权限时可以从internet访问此服务器,则需要小心。我收到此错误,因为我的配置文件中有引号
[mysql]
username: 'uuuu'
password: 'pppp'
host: 'localhost'
database: 'dddd'
给了我错误。但是,删除引号是有效的:
[mysql]
username: uuuu
password: pppp
host: localhost
database: dddd
我想为原因添加一个可能性:MySQL和
MySQL连接器python
之间的版本不匹配。这个问题发生在我使用MySQL时5.6.24-72.2-log
和MySQL连接器python==8.0.13
。降级到mysql连接器python==8.0.5
解决了问题。虽然我使用的是Python2,但希望这能为调试提供更多线索。同样的任务,我遇到了很多麻烦。以下是对我有效的方法:
我必须使用旧密码加密选项(与MySQL 5.x兼容)初始化一个新数据库:
一旦我这么做了,一切都很顺利。我从这篇文章中得到了这个建议:
以下是一些规格:
- 我正在使用Python 3.7
- 我已经安装了MySQL 8.0.17和MySQL连接器python 2.0.4
- 我在尝试将数据从python脚本传输到Raspberry Pi上的MySQL数据库时遇到了这个问题
当您最初安装MySQL时,无论您输入什么密码,它都会将您设置为用户“root”。如果您后来更改了安全设置以使用强密码(如我所做的),则您的密码必须包含大写、小写、数字和特殊字符
这可能是您尝试连接到数据库时引发错误的原因
要纠正这一点:
登录MySQL:
sudomysql--user=root
删除根用户:
DROP USER'root'@'localhost'代码>
创建新用户:
创建由“密码”标识的用户“root”@“localhost”代码>
授予用户所有权限:
使用GRANT选项将**上的所有权限授予“root”@“localhost”
对我来说,它修复了正确的端口(在安装时更改了默认端口,因为它已经被使用)。在.my.cnf
文件中使用引号在从命令行运行mysql
时可以正常工作,但在使用python mysql.connector时不行。来自@paperduck的回答在我的案例中是正确的。谢谢,这是我的问题,使用带有docker-compose.ymlawesome的.env文件!说得好。这正是我想要的。