1、环境介绍
Python3.9
MySQL8.0.29
2、问题描述
在利用Python创建数据池的时候,出现这个问题
代码为:
import mysql.connector.pooling # 定义连接需要的参数,用字典封存,私有参数 __config = { "host":"localhost", "port":3306, "user":"root", "password":"root", "database":"studentTable" } # 创建连接池,定义最大连接数 try: pool = mysql.connector.pooling.MySQLConnectionPool( **__config, pool_size=10 ) except Exception as e: print("创建连接池出现异常:",e)
3、原因分析
使用客户端链接mysql数据库,如果数据库版本高于8.0,可能出现以上问题,因为8.0以前默认使用mysql_native_password身份验证机制,8.0以后默认使用caching_sha2_password方式,因此需要将其改成mysql_native_password验证机制
4、 解决方案
1)方法一:直接改成mysql_native_password验证方式
https://blog.csdn.net/qq_45769063/article/details/121986314
在参数设置的后面添加这行,修改验证机制
"auth_plugin": 'mysql_native_password'
import mysql.connector.pooling # 定义连接需要的参数,用字典封存,私有参数 __config = { "host":"localhost", "port":3306, "user":"root", "password":"root", "database":"studentTable", "auth_plugin": 'mysql_native_password' } # 创建连接池,定义最大连接数 try: pool = mysql.connector.pooling.MySQLConnectionPool( **__config, pool_size=10 ) except Exception as e: print("创建连接池出现异常:",e)
注:这个方案之前是可行的,但是这次没有解决,于是有了方案二
2)方案二: 利用sql命令将验证机制修改
https://blog.csdn.net/c359719435/article/details/80432508
https://blog.csdn.net/qq_45769063/article/details/122322667
① 打开命令行窗口——cmd
② 登录mysql数据库
mysql -uroot -p
③ 查看不同用户名的身份验证方式select user,plugin from mysql.user;
select user,plugin from mysql.user;
可以看到数据库有5个用户名(user),因为我们创建数据池的时候用的是root用户名,所以我们看一下root用户名的身份验证方式(plugin),root有两个用户名,且有一个验证方式是caching_sha2_password,因此我们需要修改它
④ 将caching_sha2_password修改为mysql_native_password验证方式
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
再运行select user,plugin from mysql.user;查看不同用户名的身份验证方式,如下图所示,可以发现两个root用户名的验证方式都已经修改成为mysql_native_password了。
⑤ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root'; 语句解释
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';这行代码有两层含义,第一:修改root的密码为’root’,摒弃原来的旧密码。第二:使用mysql_native_password对新密码进行编码。
注:利用这种方式解决了我的问题
3)方案三 :直接将mysql版本降低为8.0以下
推荐本站淘宝优惠价购买喜欢的宝贝:
本文链接:https://hqyman.cn/post/4005.html 非本站原创文章欢迎转载,原创文章需保留本站地址!
休息一下~~