摘要訊息 : MySQL 8 改變了連線的加密方式, 從而導致了應用程式的連線發生錯誤, 本文給除了一種修復方式.

0. 前言

MySQL 已經從 MySQL 5.7 升級到 MySQL 8 了, 據說 MySQL 8 比 MySQL 5.7 要快兩倍. 而 MySQL 8 的一個新特性, 也就是登錄使用全新的加密方式, 這導致了很多程式和 MySQL 的連線都出現了問題.

本文於 2022 年 3 月 24 日進行一次更新和修正. 修正之後本文已經歸檔, 不再享受更新.

1. 解決方案

很多應用程式都升級了和 MySQL 的連線, 但是仍然有部分應用程式沒有升級. 對於那些仍然有問題的應用程式, 我們可以建立一個新的全域權限使用者 :

mysql -uroot -p
# 輸入你的 MySQL 密碼
CREATE USER '使用者名稱'@'localhost' IDENTIFIED WITH mysql_native_password BY '使用者密碼';
GRANT ALL PRIVILEGES ON *.* TO '使用者名稱'@'localhost' WITH GRANT OPTION;

我們也可以將加密方式切換到 MySQL 5 的加密方式 : vim /etc/my.cnf (如果大家不是直接採用本網誌給出的教學安裝的 MySQL, 大家可以自行定位這個檔案), 在最下面增加一行 default_authentication_plugin=mysql_native_password. 然後重新啟動 MySQL systemctl restart mysqld 即可.