1. 程式人生 > 資料庫 >Docker版的MySQL5.7升級到MySQL8.0.13,資料遷移

Docker版的MySQL5.7升級到MySQL8.0.13,資料遷移

1.備份舊的MySQL5.7的資料

記得首先要備份舊的資料,防止升級失敗導致資料丟失。備份的方式有兩種,一種是在宿主機直接執行匯出命令,另外一種是先進入Docker環境下進行操作。主要的匯出命令如下:

#方式一,直接在宿主機器進行資料備份
# 0df568 是docker的id ;-uroot -p123456 是使用者名稱和密碼;dbA dbB是要備份的資料,--databases 後面可以接多個數據庫名,匯出的sql到/root/all-databases3306.sql
docker exec -it 0df568 mysqldump -uroot -p123456 --databases dbA dbB > /root/all-databases3306.sql
#========================================================================================================================================================
#方式二,先進入到docker在執行mysqldump,然後再將匯出的sql拷貝到宿主
#先進入docker
docker exec -it 0df568 /bin/bash
#可選的
source /etc/profile
#執行匯出命令
mysqldump -uroot -p123456 --databases dbA dbB > /root/all-databases3306.sql
#拷貝到宿主機器
#退出Docker,執行exit命令
exit
#此時,已經在宿主的環境,執行拷貝命令,將sql檔案從docker紅拷貝出來
docker cp 0df568:/root/all-databases3306.sql /root/all-databases3306.sql

2.拉取MySQL8.0.13的映象,完成安裝

拉取和安裝MySQL其實可以完全參考官網即可。參考網址:https://hub.docker.com/r/mysql/mysql-server/ ,這裡再簡單的描述一下安裝的過程。

2.1 拉取映象到本地

執行下面的命令即可拉取最新的MySQL映象

 docker pull mysql/mysql-server:lastest

拉取指定的MySQL映象

#tag就是填寫你要的版本號,例如你想要的MySQL8.0.13那麼tag就是8.0.13,則執行:docker pull mysql/mysql-server:8.0.13
docker pull mysql/mysql-server:tag

可以使用docker images檢視你拉取下來的進行。

2.2 執行MySQL8.0.13映象

執行指定的MySQL8.0.13的Docker映象,我們在2.1步驟已經拉取了指定的映象下來,那麼可以通過docker images檢視到本地的Docker映象,得到映象的ID和名字。接下來執行下列的命令執行MySQL8.0.13的Docker映象:

#--name指定執行啟動後的名字 -e 指定docker裡的環境變數 -v 分割槽或者是目錄對映,docker的程式資料對映到宿主的指定位置 -p 指定 宿主到docker程式的埠對映 -d 指定映象的版本。
docker run --name=mysql8.0 -e MYSQL_ROOT_PASSWORD=123456 -v /root/dockerdata/mysql8.0/data:/var/lib/mysql -p 3307:3306 -dit mysql/mysql-server:8.0.13 

檢視是否在執行

# 執行下列的命令
docker ps

3.升級到MySQL8.X之後的一些問題

升級MySQL8.x後,遠端連線無法連線,這樣很不方便,需要進行修改。主要包括下面兩方面的配置:

3.1 提供遠端訪問

修改使用者為@'%',%代表所有的主機都可以連線,命令如下:

#先root登入到資料庫,執行下列的命令
#a.使用msyql
use mysql;
#b.然後執行授權
GRANT ALL PRIVILEGES ON . TO 'root'@'%' IDENTIFIED BY '123456'
#c.一定要重新整理許可權(重新載入),否則需要重啟MySQL才能生效
FLUSH PRIVILEGES;

3.2 更改連線的密碼校驗方式

MySQL8.X的加密方式是caching_sha2_password,caching_sha2_password加密方式在遠端訪問時候不支援,所以需要改成:mysql_native_password

# a.修改指定的使用者
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
# b.一定要重新整理許可權(重新載入),否則需要重啟MySQL才能生效
FLUSH PRIVILEGES;

4.匯入資料到新的MySQL中

匯入資料,我採用的方式是先將資料庫備份檔案拷貝進新的Docker,然後再執行匯入命令。命令如下:

#拷貝備份的檔案到docker中
docker cp /root/all-databases3306.sql 3sfsdf:/root/all-databases3306.sql 
#先進入docker環境,然後匯入到資料庫
docker exec -it xxx /bin/bash
mysql -u root -p < /root/all-databases3306.sql

5.參考文件

https://hub.docker.com/r/mysql/mysql-server/
https://bugs.mysql.com/bug.php?id=92675

總結

以上所述是小編給大家介紹的Docker版的MySQL5.7升級到MySQL8.0.13,資料遷移,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回覆大家的。在此也非常感謝大家對我們網站的支援!
如果你覺得本文對你有幫助,歡迎轉載,煩請註明出處,謝謝!