MySQL8.0升級的踩坑歷險記
最近忙于Fighting的項目,所以筆耕有些松懈,實為不該。
剛好遇到需要從MySQL5.7.33升級到MySQL8.0.x的需求,于是記錄一下整個升級過程,踩坑而過。
背景梗概:本地docker容器中使用的MySQL是5.7.33(鏡像系統(tǒng)用的是ubuntu16.04),而新項目在線上使用了MySQL8.0。從線上導(dǎo)出的sql文件(表結(jié)構(gòu)+數(shù)據(jù))中有一種低版本MySQL不會用到的字符編碼,一導(dǎo)入就報錯,遇到的字符集報錯如下所示:
- Unknown collation: 'utf8mb4_0900_ai_ci'
一頓搜索之后,我也冷靜了下來,有兩種思路,一種是被我稱為掩耳盜鈴式解決方法,一種是根治的辦法。
掩耳盜鈴,顧名思義,不解決本質(zhì)問題,而是通過批量替換字符集的方式解決報錯,也就是把文件中所有的utf8mb4_0900_ai_ci 替換為:utf8_general_ci。
第二種就是保持和線上的MySQL版本一致,這樣就能支持該字符集。
于是我采用第二種方法,升級我的docker容器中的MySQL,順便也可以打包一個新的鏡像。
升級的過程也有點坎坷,但邏輯是清晰地。
1.先徹底卸載現(xiàn)有版本MySQL。
可以使用如下命令:
#刪除mysql的數(shù)據(jù)文件 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。
可以去官網(wǎng)下載,官網(wǎng)地址為https://dev.mysql.com/repo/apt
我們選擇最新的deb下載,網(wǎng)址為:
https://dev.mysql.com/get/mysql-apt-config_0.8.20-1_all.deb。在命令后使用wget命令進(jìn)行下載,如下:
wget https://dev.mysql.com/get/mysql-apt-config_0.8.20-1_all.deb
下載完成之后使用dpkg命令并更新apt源,然后就可以進(jìn)行安裝了,完整命令如下所示:
dpkg -i mysql-apt-config_0.8.20-1_all.deb apt-get update apt-get install -y mysql-server
在最后一個命令執(zhí)行過程中,它會讓你輸入root密碼和一些基本配置,然后就可以完成安裝了。
因為是在ubuntu里面安裝的MySQL,所以啟動方式為:
service mysql start
你可以使用命令查看進(jìn)程運行情況,正常的時候類似如需輸出:
/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.創(chuàng)建用戶和配置權(quán)限。
MySQL8.0.x實際使用的過程中發(fā)現(xiàn)用戶授權(quán)和之前版本有點不同,需要分三步:
- 創(chuàng)建用戶。
- 分配權(quán)限。
- 刷新權(quán)限。
具體的sql語句如下,順序也是嚴(yán)格的:
create user 'freephp'@'%' identified by '176serTTc8Cg'; grant all privileges on dev_database.* to 'freephp'@'%' with grant option; flush privileges;
上面的sql解釋一下,第一句是創(chuàng)建一個名為freephp的用戶,密碼為176serTTc8Cg,%代表可以任意主機進(jìn)行連接。
第二句的意思是把dev_database的所有權(quán)限賦予用戶freephp。
第三句就是立即刷新權(quán)限,讓新創(chuàng)建的權(quán)限生效。
自此歷險記大功告成,MySQL8.0的新特性還需要探索,下次再聊。
總結(jié)
到此這篇關(guān)于MySQL8.0升級踩坑的文章就介紹到這了,更多相關(guān)MySQL8.0升級踩坑內(nèi)容請搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!
版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。