升級MySQL8.0的歷險記


最近忙於Fighting的項目,所以筆耕有些松懈,實為不該。
剛好遇到需要從MySQL5.7.33升級到MySQL8.0.x的需求,於是記錄一下整個升級過程,踩坑而過。

背景梗概:本地docker容器中使用的MySQL是5.7.33(鏡像系統用的是ubuntu16.04),而新項目在線上使用了MySQL8.0。從線上導出的sql文件(表結構+數據)中有一種低版本MySQL不會用到的字符編碼,一導入就報錯,遇到的字符集報錯如下所示:

 - Unknown collation: 'utf8mb4_0900_ai_ci'

一頓搜索之后,我也冷靜了下來,有兩種思路,一種是被我稱為掩耳盜鈴式解決方法,一種是根治的辦法。
掩耳盜鈴,顧名思義,不解決本質問題,而是通過批量替換字符集的方式解決報錯,也就是把文件中所有的utf8mb4_0900_ai_ci 替換為:utf8_general_ci。
第二種就是保持和線上的MySQL版本一致,這樣就能支持該字符集。
於是我采用第二種方法,升級我的docker容器中的MySQL,順便也可以打包一個新的鏡像。
升級的過程也有點坎坷,但邏輯是清晰地。

  • 1.先徹底卸載現有版本MySQL。可以使用如下命令:
#刪除mysql的數據文件
sudo rm -R /var/lib/mysql/
#刪除mysql的配置文件

sudo rm -R /etc/mysql/

#自動卸載mysql(包括server和client)
sudo apt-get autoremove mysql* --purge
sudo apt-get remove apparmor

記得一定要刪除配置文件,因為有可能不兼容。

  • 2.下載deb並按照MySQL8.x。

可以去官網下載,官網地址為https://dev.mysql.com/repo/apt

我們選擇最新的deb下載,網址為:
https://dev.mysql.com/get/mysql-apt-config_0.8.20-1_all.deb。在命令后使用wget命令進行下載,如下:

wget https://dev.mysql.com/get/mysql-apt-config_0.8.20-1_all.deb

下載完成之后使用dpkg命令並更新apt源,然后就可以進行安裝了,完整命令如下所示:

dpkg -i mysql-apt-config_0.8.20-1_all.deb
apt-get update
apt-get install -y mysql-server

在最后一個命令執行過程中,它會讓你輸入root密碼和一些基本配置,然后就可以完成安裝了。

因為是在ubuntu里面安裝的MySQL,所以啟動方式為:

service mysql start

你可以使用命令查看進程運行情況,正常的時候類似如需輸出:

/usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock
  • 3.創建用戶和配置權限。
    MySQL8.0.x實際使用的過程中發現用戶授權和之前版本有點不同,需要分三步:
  1. 創建用戶。
  2. 分配權限。
  3. 刷新權限。
    具體的sql語句如下,順序也是嚴格的:
create user 'freephp'@'%' identified by '176serTTc8Cg';

grant all privileges on dev_database.* to 'freephp'@'%' with grant option;

flush privileges;

上面的sql解釋一下,第一句是創建一個名為freephp的用戶,密碼為176serTTc8Cg,%代表可以任意主機進行連接。
第二句的意思是把dev_database的所有權限賦予用戶freephp。
第三句就是立即刷新權限,讓新創建的權限生效。
自此歷險記大功告成,MySQL8.0的新特性還需要探索,下次再聊。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM