
Python MySQL8.0 錯誤:authentication plugin 'calling_sha2_password' is not supported.
Python3 進行到 python3 mysql(mysql-connector),然后安裝mysql-8.0.16,照著示例程序運行 python,遇到這個大大的問題:
authentication plugin 'calling_sha2_password' is not supported.
在網上找了無數答案,現在來總結一下。
根目錄下新建 my.ini 文件,設置 MySQL 復制以下配置信息到新建的 my.ini 文件中。
[mysqld]
# 設置3306端口
port = 3306
# 設置mysql的安裝目錄
basedir=D:webmysql-8.0.16-winx64
# 設置 mysql數據庫的數據的存放目錄,MySQL 8+ 不需要以下配置,系統自己生成即可,否則有可能報錯
# datadir=D:websqldata
# 允許最大連接數
max_connections=20
# 服務端使用的字符集默認為8比特編碼的latin1字符集
character-set-server=utf8
# 創建新表時將使用的默認存儲引擎
default-storage-engine=INNODB
# 默認使用“mysql_native_password”插件認證
default_authentication_plugin=mysql_native_password
[mysql]
# 設置mysql客戶端默認字符集
default-character-set=utf8
[client]
# 設置mysql客戶端連接服務端時默認使用的端口
port=3306
default-character-set=utf8
在 MySQL 8.0 中驗證插件和密碼加密方式發生了變化,caching_sha2_password 是默認的身份驗證插件而不是之前版本的 mysql_native_password。
使用指令:
use mysql;
select plugin,authentication_string from user;
查看。
因此如果需要保持之前的驗證方式并保持之前版本的密碼加密方式需要在配置文件中修改,暫不支持動態修改,需要重啟生效。即:
# 默認使用 mysql_native_password 插件認證
default_authentication_plugin=mysql_native_password
將 8.0 已有的 sha2 密碼修改為 sha1 的模式:
# 修改加密規則為永不過期
#注意:password 改為你的密碼,別老老實實照抄,之前本人便以為 password 指代密碼不用改變,結果一通指令下去,mysql 登不上了,只好重新初始化數據庫
ALTER USER 'root'@'127.0.0.1' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
#更新一下用戶的密碼加密方式為之前版本的方式
ALTER USER 'root'@'127.0.0.1' IDENTIFIED WITH mysql_native_password BY 'password';
#刷新權限
FLUSH PRIVILEGES;
重啟,這是再看,已經修改了身份驗證插件。
這時再稍稍修改實例程序,便可以連接了:
import mysql.connector
mydb=mysql.connector.connect(
host="localhost",
user="ly",
passwd="123456",
auth_plugin='mysql_native_password'
)
print(mydb)