Docker部署MySql,解決‘caching_sha2_passord’問題、時區問題等

關聯文章

CentOS 7 安裝mysql 8.0 圖文教程

今天分享如何在docker上部署mysql 8.0,並解決部署過程遇到的問題。

如果需要其他mysql版本,可以到docker hub進行查找,地址:https://hub.docker.com/_/mysql

docker部署mysql步驟

1、查看mysql鏡像列表

 docker search mysql

2、拉取自己需要的鏡像版本,這裏我們選擇的是默認版本

docker pull mysql

3、查看下載的鏡像版本

docker images

4、創建掛載目錄,目錄地址根據自己需要創建

mkdir -p /dockerdata/mysql/conf /dockerdata/mysql/data

5、根據下圖,瞭解到主配置文件 my.cnf 加載了 /etc/mysql/conf.d 文件夾下所有的配置(後綴必須是 .cnf),新建配置文件 myconf.cnf,並寫入自定義配置內容。

     1)、通過vim新建myconf.cnf

vim myconf.cnf

     2)、輸入內容後通過esc+wq指令保存,這裏注意,如果配置lower_case_table_names啓動會報錯,自己試了下確實會啓動失敗,具體結局方式需要查找相關文檔,問題來源:https://bugs.mysql.com/bug.php?id=90695

[mysqld]
#Mysql服務的唯一編號 每個mysql服務Id需唯一
server-id = 1
#服務端口號 默認3306
port = 3306
#數據庫默認字符集,主流字符集支持一些特殊表情符號(特殊表情符佔用4個字節)
character-set-server = utf8mb4
#數據庫字符集對應一些排序等規則,注意要和character-set-server對應
collation-server = utf8mb4_general_ci
#設置client連接mysql時的字符集,防止亂碼
init_connect='SET NAMES utf8mb4'
#最大連接數
max_connections = 400
#最大錯誤連接數
max_connect_errors = 1000
#時區配置
default-time_zone = '+8:00'


#慢sql等等其他的日誌配置可以自己網上查找,配置新參數後,後記得重啓

6、啓動容器,掛載目錄和密碼根據自己需求配置

docker run -it -d --name mysql  \
-v /dockerdata/mysql/conf:/etc/mysql/conf.d \
-v /dockerdata/mysql/data:/var/lib/mysql \
-p 3306:3306 -p  33060:33060 -e MYSQL_ROOT_PASSWORD=123456 mysql

# 賬號爲root, MYSQL_ROOT_PASSWORD 密碼根據自己需求配置

7、查看容器狀態

docker ps -a

8、使用Navicat測試連接

 

以上,docker部署mysql就完成了。

 

問題總結

1、Navicat連接mysql出現authentication plugin ‘caching_sha2_passord’錯誤。

問題原因:mysql 8.0 默認使用 caching_sha2_password 身份驗證機制,從原來的 mysql_native_password 更改爲caching_sha2_password。從 5.7 升級 8.0 版本的不會改變現有用戶的身份驗證方法,但新用戶會默認使用新的 caching_sha2_password 。客戶端不支持新的加密方式。如果你安裝的是5.7等版本應該不會出現這個錯誤。

解決方法:

#進入容器內部
docker exec -it XXX /bin/bash

#訪問mysql,並輸入密碼
mysql -u root -p

#更換密碼的驗證方式,然後進行刷新
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
flush privileges;

#退出容器
先按,Ctrl+P;  再按,Ctrl+Q

2、數據庫時區問題,有的同學安裝後,發現時間戳等自動生成的時間小於當前時間8小時

問題原因:這裏我們可以進入docker內部,執行sql指令查看當前的時間和time_zone配置

mysql> select now();
mysql> show variables like '%time_zone%'; 

解決方法一:通過mysql命令設置time_zone

優點:不需要重啓MySQL服務,缺點:MySQL服務重啓,設置就會消失

mysql> set time_zone = '+8:00';
mysql> set global time_zone = '+8:00';

解決方法二:通過cnf配置,我在上文中的cnf配置已經設置了時區,配置完後記得要重啓

[mysqld]
#設置默認時區
default-time_zone='+8:00'

設置後我們再查看time_zone,問題就解決了

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章