前提,已經弄好基本的docker服務了。
一、基本流程
1、目錄準備
我自己的資料喜歡放在 /data 目錄下,所以老規矩:
先進入 /data 目錄:
cd /data
創建 mysql 目錄:
mkdir mysql
2、鏡像查找
docker search hub.rat.dev/mysql:8.0.27
3、鏡像拉取
docker pull?hub.rat.dev/mysql:8.0.27
4、創建容器
docker run -id \
-p 3306:3306 \
--name=mysql?\
-v $PWD/conf:/etc/mysql/conf.d \
-v $PWD/logs:/logs \
-v $PWD/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=151128 \
hub.rat.dev/mysql:8.0.27
5、查看容器
docker ps
二、各類問題合集
1、【解決】mysql鏡像拉取出現網絡錯誤
鏡像加速器參照(下面的連接會不斷更新國內能夠使用的Docker鏡像源,可以自己看看,自己的服務器可以用哪一個或者哪幾個):
國內能用的Docker鏡像源【2025最新持續更新】_docker 鏡像-CSDN博客
有哪些可以用的鏡像加速器、具體怎么使用,參照上文即可。
2、【解決】caching sha2 password
(1)背景
docker容器使用的mysql鏡像是9版本。
我電腦安裝的navicat是16,同事應該是12及以下的版本。
我的電腦用navicat連接遠程服務器的mysql,沒有問題。但同事的不可以,會報錯。
顯示:Authentication plugin 'caching sha2 password' cannot be loaded
(2)原因
在使用 MySQL 8 及以上版本時,默認的加密方式是?caching_sha2_password,而在 MySQL 8 之前的版本中,默認的加密方式是?mysql_native_password。因此,當使用一些舊版本的客戶端(如 Navicat Premium 12)連接 MySQL 數據庫時,可能會出現?Authentication plugin 'caching_sha2_password' cannot be loaded?的錯誤。
(3)解決思路
更換一下加密方式,參照網絡文檔(直接走這個文檔,mysql鏡像版本太高的話,會報錯):
navicat連接MySQL8.0提示caching_sha2_password問題解決方法-CSDN博客
報錯信息:
ERROR 1524 (HY000): Plugin 'mysql_native_password' is not loaded
(4)【解決】mysql_native_password is not loaded
檢查了一下,發現是mysql鏡像太高了,到9了。
查看mysql鏡像版本:打開與數據庫的連接,不需要引用表,直接輸入查詢語句。
SELECT VERSION();
具體操作見 3。
3、更換mysql鏡像
那么,現在需要把mysql鏡像的版本降下來。
(1)備份數據!!!
(2)備份數據!!!
(3)備份數據!!!
把所有數據庫表的轉儲成sql下來,轉儲的時候千萬把數據一起轉儲出來,別只轉儲了表結構。
記錄所有數據庫表的名稱、字符集、排序規則。等一下要還原回去的。
(4)停止mysql容器
docker stop mysql
(5)mysql數據文件夾
cd /data
mv mysql mysql.bak
將mysql對應的數據文件夾進行重命名,后期如果創建失敗,能夠把文件夾重新還原回去。
(6)創建mysql容器
參照一、基本流程進行
(7)進入mysql容器內部
docker exec -it mysql /bin/bash
需要注意:如果剛剛stop的容器叫mysql,又沒有刪除。那么這次創建的容器就不能夠叫mysql,可以改成 mysql_3306 或者其他。
(8)打開mysql
mysql -uroot -p
回車后輸入密碼即可。
或者-p后面直接帶上密碼,然后回車。
(9)跟著文檔走一次
navicat連接MySQL8.0提示caching_sha2_password問題解決方法-CSDN博客
(10)用navicat連接mysql
應該就可以了。
(11)數據還原
依次:建數據庫 - 按照名稱、字符集、排序進行回填 - 運行轉儲的sql文件
(12)碎碎念
本來不想這么麻煩的,有別的方式可以解決報錯:
ERROR 1524 (HY000): Plugin 'mysql_native_password' is not loaded
參考文檔(寫得非常清晰,鼓掌):
ERROR 1524 (HY000): Plugin ‘mysql_native_password‘ is not loaded-CSDN博客
但是我弄的這個鏡像,什么命令都沒有:vim、yum、apk、apt-get、dnf、apt、wegt.......
倒是rpm、curl、mv可以用,通過curl下載下來的rpm包,rpm -ivh又一直報錯。
查了一下 /etc/os-release,是Oracle Linux Server。
我直接訪問:
Oracle Linux 7 (x86_64) Latest | Oracle, Software. Hardware. Complete.
一看,n個包,嘗試手動下載,初略下載了幾個,然后通過docker創建容器映射的目錄方式,遷移到容器內部。然后開始擺爛。
你依賴我,我依賴它的,啊啊啊啊。不下載了。
想了想,也不是非要去改my.cnf。但是同事又連不上mysql,如果不通過升級navicat的版本的方式,就只能去降mysql鏡像版本了。