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

背景介紹

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

從部署到導入數據,一切正常。完事以後進入container裏面簡單的查了下數據的個數,em~~~ 沒問題了。 因而邊和測試的同事說了一聲,下午能夠看是集成測試了。sql

 

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

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

我: 沒問題啊,我上午檢查過的。。。 好吧,我一會就回去,我們一塊兒看看吧。服務器

 

 

 

緣由

回到公司,找到同事,發現報錯以下: 「Authentication plugin 'caching_sha2_password' cannot be loaded」。工具

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

 

解決方案

因而在網上搜了一下,很快就找到了解決方案。 測試

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」加密

完成後效果以下:spa

 

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

 

更爲優雅的解決方案

 又從新回到了 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/

相關文章
相關標籤/搜索