解決Docker mysql容器升級到 mysql8遇到的問題

mysql視頻教程欄目介紹docker mysql容器升級到 mysql8遇到的問題,告訴大家如何有效解決。

解決Docker mysql容器升級到 mysql8遇到的問題

推薦(免費):mysql視頻教程

問題還原
原本的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工具連接報如下的錯

解決Docker mysql容器升級到 mysql8遇到的問題

那么你需要修改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;

查看如下圖

解決Docker mysql容器升級到 mysql8遇到的問題

為啥非要修改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’@'%' 的賬號并修改它的權限可以遠程訪問,修改命令網上找

? 版權聲明
THE END
喜歡就支持一下吧
點贊12 分享