共計 1676 個字符,預計需要花費 5 分鐘才能閱讀完成。
自動寫代碼機器人,免費開通
這篇文章主要介紹怎么處理 Docker mysql 容器升級到 mysql8 遇到的問題,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
問題還原
原本的 mysql 容器創建 命令如下
docker run --name mysql -v /xxxx/xxx/mysqldata:/var/lib/mysql -p xxx:3306 -d mysql:laster
數據目錄被掛載到 /xxxx/xxx/mysqldata 下面 領導讓升級 mysql 我天真的下了一個 mysql:8.0.11 最新的
mysql 鏡像 然后執行
docker run --name mysql -v /xxxx/xxx/mysqldata:/var/lib/mysql -p xxx:3306 -d mysql:8.0.11
創建容器 同樣掛載到原本的目錄: /xxxx/xxx/mysqldata
結果容器秒退根本無法起來 查看日志
docker logs -f -t --tail 70 mysql
日志說 大概是 /xxxx/xxx/mysqldata 下面的插件文件是 5.7 版本創建的 8.0 無法啟動 然后我有切回原本的 mysql:laster 鏡像創建容器,又說這個目錄下的文件被 8.0 修改無法啟動,感覺這個目錄就這么廢了,老的鏡像無法啟動,新的也無法啟動。
所以自己被自己的行為蠢哭了千萬別再直接用新本的鏡像啟動容器時掛接原本的 mysql 目錄,有同事說這樣沒問題,但為啥我出問題了人設有問題嗎
解決方法:
用老的 mysql:laster 鏡像連接 /xxxx/xxx/mysqldata 的備份目錄,備份太重要了。啟動一個 mysql 容器
用新的 mysql:8.0.11 啟動一個新的 mysql 容器,掛接一個任意目錄。然后通過 navicat 等其他工具將老的數據備份還原到新的 mysql 容器中。或者通過命令
$ docker exec some-mysql sh -c exec mysqldump –all-databases -uroot -p $MYSQL_ROOT_PASSWORD /some/path/on/your/host/all-databases.sql 備份還原。
1、如果你的新本 mysql 還原成功了你用 navicate 工具連接報如下的錯
那么你需要修改 mysql 的 my.cnf 文件:
添加:
default_authentication_plugin=mysql_native_password
因為 8.0 使用的是 caching_sha2_password
你可以進入容器:
docker exec -it mysql /bin/bash
mysql -uroot -pxxxx
use mysql
select Host,User,plugin from mysql.user;
查看如下圖
為啥非要修改 caching_sha2_password 為 mysql_native_password,我也不知道只是我的 8.0.11 的 mysql 容器啟動后,程序接口任然無法正常使用報錯:無法連接不支持的認證方法,這個時候可能需要升級程序接口的 mysql 驅動,但是懶得升,只能修改 caching_sha2_password 為 mysql_native_password 結果就可以正常連接了。
3、一點 docker 命令記錄一下
重容器中拷貝文件到宿主機 不需要容器啟動
docker cp 容器:/etc/mysql/my.cnf /home/xxx/my.cnf
將宿主機的文件拷貝容器里面的目錄下 會覆蓋老的文件
docker cp /home/xxx/my.cnf 容器:/etc/mysql/
如果你特別牛逼程序中是用 root 來連接賬號的那你可能還需要創建一個 ‘root’@ % 的賬號并修改它的權限可以遠程訪問,修改命令網上找
以上是“怎么處理 Docker mysql 容器升級到 mysql8 遇到的問題”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注丸趣 TV 行業資訊頻道!
向 AI 問一下細節