通过 python 连接 mysql 数据库时出现连接错误

Connection Error while connecting the mysql database through python

我正在尝试使用下面提到的 python 代码

连接 Mysql 服务器
import mysql.connector

mydb = mysql.connector.connect(
    host = "127.0.0.1",
    port = 5000,
    user = "user id",
    password = "password"
    )

print(mydb)

但是当 运行 这段代码测试我是否与 MySQL 连接时,我遇到了我无法理解的错误。

Traceback (most recent call last):
  File "C:\Users\varul.jain\Desktop\Test Phase\Mysql\mydb_test.py", line 7, in <module>
    password = "root"
  File "C:\Users\varul.jain\AppData\Local\Programs\Python\Python36\lib\site-packages\mysql\connector\__init__.py", line 179, in connect
    return MySQLConnection(*args, **kwargs)
  File "C:\Users\varul.jain\AppData\Local\Programs\Python\Python36\lib\site-packages\mysql\connector\connection.py", line 95, in __init__
    self.connect(**kwargs)
  File "C:\Users\varul.jain\AppData\Local\Programs\Python\Python36\lib\site-packages\mysql\connector\abstracts.py", line 716, in connect
    self._open_connection()
  File "C:\Users\varul.jain\AppData\Local\Programs\Python\Python36\lib\site-packages\mysql\connector\connection.py", line 210, in _open_connection
    self._ssl)
  File "C:\Users\varul.jain\AppData\Local\Programs\Python\Python36\lib\site-packages\mysql\connector\connection.py", line 142, in _do_auth
    auth_plugin=self._auth_plugin)
  File "C:\Users\varul.jain\AppData\Local\Programs\Python\Python36\lib\site-packages\mysql\connector\protocol.py", line 102, in make_auth
    auth_data, ssl_enabled)
  File "C:\Users\varul.jain\AppData\Local\Programs\Python\Python36\lib\site-packages\mysql\connector\protocol.py", line 58, in _auth_response
    auth = get_auth_plugin(auth_plugin)(
  File "C:\Users\varul.jain\AppData\Local\Programs\Python\Python36\lib\site-packages\mysql\connector\authentication.py", line 191, in get_auth_plugin
    "Authentication plugin '{0}' is not supported".format(plugin_name))
mysql.connector.errors.NotSupportedError: Authentication plugin 'caching_sha2_password' is not supported

注意:我已将默认值初始化为 5000

出于测试目的,我已经初始化了端口 5000,用户 - root 和密码 - root

但根据上述错误,默认密码的授权不可用

有什么方法可以检查用户 ID 和密码,以便相应地在 python 代码中进行交叉验证和更新?

建议会有帮助

根据 SQL 文档 python library.you 需要指定 auth 插件如下:-

conn = mysql.connector.connect(user='root', password='password', host='127.0.0.1',port=5000, database='test', auth_plugin='mysql_native_password')
print(conn)

按照以下步骤操作:

  1. 您必须安装 MySQL 服务器 (https://dev.mysql.com/downloads/installer/)

从此安装 MySQL 服务器。

  1. 安装 mysql-connector-python(在您的 python 环境中)
  2. 使用此代码:

    打开数据库连接

    进口mysql.connector

    mydb = mysql.connector.connect(host="127.0.0.1", port="3306", user="root", password="root", auth_plugin ="mysql_native_password")

    打印(mydb)

我使用 webmin + python3 在我的 centOS VPS 上遇到了类似的问题。

起初我认为可能是连接包的问题,​​所以我尝试了:

  1. 'python3 -m pip install mysql-connector' ,在 python 中它将使用 'import mysql.connector'

  2. 'pip3 install PyMySQL' ,在 python 中使用 'import PyMySQL'

两者都没有解决问题。然后我从一个网站上找到了其他几种连接方式(我现在不记得它的地址了),其中详细解释了每种方式的优缺点,根据它,我最终选择使用mysqlclient.

  1. 'sudo pip3 install mysqlclient' ,我使用它是因为它更通用并且支持 python3.

以上都没有解决我的问题,我仍然遇到连接错误。

我尝试了几次随机测试,不小心用 root 和配置文件中的 skip-grant-tables 选项,我能够使用 SSH python 代码登录 mysql,但是这不是原因,因为无论我在代码中访问什么主机,本地主机、127.0.0.1、域、....

,一个正常的新创建用户仍然无法登录

所以我撤销了 skip-grant-tables 选项,因为没有保护是有风险的(仅用于测试)。

最近,MySQL 服务器默认已经存在用户 'root',我发现它有 4 个条目,所以我尝试在 webmin -> 服务器 -> 中创建 4 个单独的相似条目记录MySQL 服务器 -> 用户权限。

这些记录具有相同的用户名和较少的权限,但分配的主机内容相似。它们是 'local' 、 '127.0.0.1' 、 'myservername.vps.provider.ca' 、 '::1'

(不知道最后一个是什么意思)

并且,Bingo,添加以上 4 个条目后,新用户可以使用通过 python3 代码提供的密码 authenthicate 登录。

(记住第一次,你必须在MySQL服务器页面设置MySQL管理员'root'和密码,这样密码登录认证功能才会起作用,并且那个密码不需要与系统的root密码相同)

就是这样,这需要我 6 个小时。希望它也可以帮助使用 webmin 的人。无论如何,如果它对您有帮助,请投赞成票。谢谢