【问题标题】:caching sha2 password is not supported mysql不支持缓存 sha2 密码 mysql
【发布时间】:2018-10-18 23:44:48
【问题描述】:

我正在尝试让我的 python 程序将数据插入 MySQL,我按照指南进行操作,但是我不断收到以下错误。

“不支持身份验证插件‘{0}’”.format(plugin_name)) mysql.connector.errors.NotSupportedError:不支持身份验证插件'caching_sha2_password'"

我错过了 mysql 服务器中的设置还是 python 还不支持这个?

我想我可以只更改密码类型,但由于某种原因 mysql 不允许我更改所有具有缓存_sha2_password 的用户,当我创建新用户并选择 SHA256 密码时,我收到创建帐户的错误@% 密码哈希没有预期的格式。检查 PASSWORD() 函数是否使用了正确的密码算法。

#!/user
# -*- coding: utf-8 -*-

from __future__ import print_function
import urllib.request
import numpy as np
import mysql.connector as mysql

from datetime import date, datetime, timedelta



cnx = mysql.connect(user='root', password='password', database='powergrid')

cursor = cnx.cursor()

tomorrow = datetime.now().date() + timedelta(days=1)

idfueltype= cursor.lastrowid

add_fueltype = ("INSERT INTO fueltype"
                "(idfueltype, fueltypecol, demand)"
               "VALUES(%s, %s, %s)")

fueltype_data = (idfueltype, 'coal', 10000)

cursor.execute(add_fueltype, fueltype_data)

cnx.commit()

cursor.close()
cnx.close()

【问题讨论】:

  • 已解决:pip install mysql-connector-python

标签: python mysql mysql-workbench


【解决方案1】:

MySQL 8.0 使 caching_sha2_password 成为新帐户的默认身份验证,这需要更新的连接器才能使用它。或者,您可以更改帐户以使用本机身份验证方法(但这不太安全)。

【讨论】:

    【解决方案2】:

    我设法解决了这个问题。最后,我在 Anaconda 中使用了一个 python 版本,它不会安装 python 连接器的 8.0.11 版本,我设法使用 Windows PowerShell(以管理员权限)在我的 vanilla python 3.6.5 上安装了 8.0.11并使用pip install MySQL-connector-python(我想我还必须将 pip 从 9 更新到 10。

    【讨论】:

    • 为我修复了它。我之前用过mysql-connector,没有提供正确的版本。
    【解决方案3】:

    似乎这个包对我有用: sudo pip install MySQL-connector-python

    【讨论】:

      【解决方案4】:

      我遇到了同样的问题

      "不支持身份验证插件'{0}'".format(plugin_name)) mysql.connector.errors.NotSupportedError:身份验证插件 不支持'caching_sha2_password'"

      这是因为您的 Python connector 不支持身份验证插件 caching_sha2_password,您需要对其进行更新。我通过从MySQL official site 安装正确的 Python 连接器来修复它。请务必根据您的操作系统、MySQL 版本和您使用的 Python 版本下载正确的连接器。

      【讨论】:

        【解决方案5】:

        为 python3 安装驱动。

        python3 -m pip install mysql-connector-python

        为制造商在您的系统上预装的默认 python 安装驱动器。

        python -m pip install mysql-connector-python
        

        【讨论】:

          【解决方案6】:

          我遇到了完全相同的问题,并尝试按照接受的答案中的建议使用 pip 更新 mysql-connector 模块,但这没有帮助。我意识到问题可能与我的 Anaconda 环境有关,因此我尝试使用 conda 来更新我的 mysql-connector-python 模块。

          最后我用以下命令解决了这个问题:

          conda install -c anaconda mysql-connector-python
          

          这似乎做了 pip 做不到的事情,至少在我的情况下。 conda包的链接是:https://anaconda.org/anaconda/mysql-connector-python

          【讨论】:

            【解决方案7】:

            刚才遇到了同样的问题,上面所有的答案都试过了(都没有)。

            根据MySQL 8 documentation,解决此问题的最简单方法是将以下内容添加到您的 MySQL d 文件中 -> 重新启动 MySQL 服务器。这对我有用!

            如果您的 MySQL 安装必须为 8.0 之前的客户端提供服务,并且在升级到 MySQL 8.0 或更高版本后遇到兼容性问题,解决这些问题并恢复 8.0 之前的兼容性的最简单方法是重新配置服务器以恢复到以前的默认值身份验证插件(mysql_native_password)。例如,在服务器选项文件中使用这些行:

            [mysqld]
            #add the following file to your MySQLd file
                default_authentication_plugin=mysql_native_password
            

            【讨论】:

              【解决方案8】:

              就个人而言,我是pymysql 包的粉丝。
              额外的好处:实现基于 PEP 249,并且是纯 Python!

              请注意:

              大多数公共 API 都与 mysqlclient 和 MySQLdb 兼容。
              PyMySQL 不支持 _mysql 提供的低级 API,例如 data_seek、store_result 和 use_result。您应该使用 PEP 249 中定义的高级 API。但支持自动提交和 ping 等一些 API,因为 PEP 249 没有涵盖它们的用例。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2021-10-12
                • 2011-04-28
                • 1970-01-01
                • 1970-01-01
                • 2018-12-27
                • 1970-01-01
                • 2020-12-22
                • 1970-01-01
                相关资源
                最近更新 更多