環境:win7
背景:跟着菜鳥教程學習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:\\web\\mysql-8.0.16-winx64 # 設置 mysql數據庫的數據的存放目錄,MySQL 8+ 不需要以下配置,系統自己生成即可,否則有可能報錯 # datadir=D:\\web\\sqldata # 允許最大連接數 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'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
#更新一下用戶的密碼加密方式為之前版本的方式
ALTER USER 'root'@'localhost' 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)
解決問題時捎帶了解的一些需要注意的知識:
使用root創建用戶及授權:
create user ly identified by '123';#創建用戶的語法: create user 用戶名 identified by '密碼' grant all on *.* to 'ly'@'localhost';#分配權限語法: grant 操作 on 數據庫名稱 to '用戶名' #*.* : 代表所有數據庫的全部表格 #也可以指定特定操作到數據庫中特定的表格 #grant select ,update ,delete ,insert on htai.student to 'ly'@'localhost'; #grant all : 代表全部權限 (execute ,select,delete,update,insert..) show grants for "ly";#查看權限
完。