修改 Docker-MySQL 容器的 默認用戶加密規則


背景介紹

今天開始做集成測試,需要把程序和環境重新部署在新的服務器上。項目的環境都是基於Docker來的,所以數據庫也是選擇從Docker官網上面拉官方的MySQL鏡像。(Tag = 8.0.12)

從部署到導入數據,一切正常。完事之后進入container里面簡單的查了下數據的個數,em~~~ 沒問題了。 於是邊和測試的同事說了一聲,下午可以看是集成測試了。

 

中午吃完發,頂着烈日出去辦點事,完事之后正往回走着突然就接到了測試同事的電話。。

QA:那個XX,你的數據庫部署好像有問題啊,我這邊用工具連不上。。。 好吧,

我: 沒問題啊,我上午檢查過的。。。 好吧,我一會就回去,咱們一起看看吧。

 

 

 

原因

回到公司,找到同事,發現報錯如下: “Authentication plugin 'caching_sha2_password' cannot be loaded”。

問題的原因:是從MySQL8.0 開始,默認的加密規則使用的是 caching_sha2_password。 我看了下我從官方拉下來的 docker 鏡像版本是8.0.12(完美中招)

 

解決方案

於是在網上搜了一下,很快就找到了解決方案。 

1. 首先找到當前數據庫用戶root的加密規則

mysql>use mysql; 
mysql>select user, host, plugin from user

 

 2. 修改加密規則為“mysql_native_password”

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'password';

注: password 替換為 root 的密碼; 或者直接更新這一行 pluggin字段 的值為 “mysql_native_password”

完成后效果如下:

 

其實到了這兒,問題已經解決。 那么再想一下,既然這個設置是默認的,那么我們能不能在部署數據庫的把它修改掉呢?

 

更為優雅的解決方案

 又重新回到了 MySQL 官方在docker的倉庫中,仔細的閱讀了一遍官方的說明。其實,我們在啟動MySQL 容器的時候,是可以修改一些設置的。主要有2種方式。1. 自定義配置文件,並 mount 到 container里。這樣在MySQL啟動時,會加載我們的配置文件。 2. 啟動MySQL容器是傳入CMD,通過命令修改默認加密規則(下面綠色部分)

# docker run -d -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=weather_db -p 3307:3306 --name test-mysql --restart always -v  /home/ct/mysql/data:/var/lib/mysql  
mysql:8.0.12 --default-authentication-plugin=mysql_native_password

另外,還有通過 docker-compose 方式來實現的,這里就不再贅述,請參考官方描述。

 

 

OK!感謝收看,同時也歡迎大家積極留言討論哈~~

 

參考

https://majing.io/posts/10000021021192

https://stackoverflow.com/questions/49194719/authentication-plugin-caching-sha2-password-cannot-be-loaded

https://hub.docker.com/r/_/mysql/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM