Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Python 3访问MySQL:用户访问被拒绝_Python_Mysql - Fatal编程技术网

从Python 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.

我尝试通过以下方法从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);

为什么会出现此错误?如何修复此错误?

这意味着MySQL由于以下原因之一拒绝了连接:

  • 用户名错误
  • 密码是错误的
  • 您连接的IP地址/主机名不是MySQL配置为允许该用户使用的IP地址/主机名
  • 用户无权访问指定的数据库
  • MySQL的用户实际上是一个用户和一个模式的组合,您可以从中进行连接。e、 g.“用户”@“10.0.23.99”或“测试”@“%”或“弗雷德”@“196.168.123.”或“玛丽”@“%.example.com”

    使用MySQL客户机,检查“MySQL”数据库中的“user”表,查看MySQL用户知道什么以及可以从哪些主机连接

    e、 g

    查看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文件!说得好。这正是我想要的。