隨著MySQL 8的普及與應(yīng)用深入,將現(xiàn)有項(xiàng)目數(shù)據(jù)庫(kù)升級(jí)至新版本已成為提升性能與安全性的必要舉措。
本文針對(duì)CRMEB多商戶系統(tǒng)(Java)項(xiàng)目數(shù)據(jù)庫(kù)升級(jí)MySQL 8.0.33的全過(guò)程,提供詳盡的步驟說(shuō)明與解決方案。內(nèi)容涵蓋依賴升級(jí)、配置調(diào)整、代碼兼容性處理及SQL語(yǔ)句優(yōu)化等關(guān)鍵環(huán)節(jié),旨在幫助大家順利完成數(shù)據(jù)庫(kù)升級(jí),規(guī)避常見(jiàn)問(wèn)題,確保系統(tǒng)穩(wěn)定運(yùn)行。
一、準(zhǔn)備工作
1. 準(zhǔn)備一個(gè)MySQL數(shù)據(jù)庫(kù),并導(dǎo)入現(xiàn)有數(shù)據(jù)。
2. 注意:若服務(wù)器內(nèi)存為4G(例如使用寶塔面板),可能無(wú)法安裝MySQL8數(shù)據(jù)庫(kù),考慮自行在服務(wù)器編碼式安裝后,外連到寶塔或其他面板上。
二、更換MySQL驅(qū)動(dòng)依賴
在pom.xml中將MySQL驅(qū)動(dòng)升級(jí)為8.0.33版本:
三、調(diào)整數(shù)據(jù)源配置
在application.yml(或application.properties)中,更新驅(qū)動(dòng)類名:
修改
datasource: driver-class-name: com.mysql.jdbc.Driver
為
datasource: driver-class-name: com.mysql.cj.jdbc.Driver
四、代碼model類關(guān)鍵字處理
如果model類中包含rank之類的MySQL8保留關(guān)鍵字,需要進(jìn)行處理。
添加@TableField(value = "xxxx")注解,如下圖
五、代碼sql處理
MySQL 8默認(rèn)啟用ONLY_FULL_GROUP_BY,要求GROUP BY字段必須與SELECT中的非聚合字段一致,否則就會(huì)報(bào)錯(cuò)。所以需要處理項(xiàng)目中使用GROUP BY 語(yǔ)句的地方。
a. MySQL-plus相關(guān)
在構(gòu)建查詢時(shí),確保GROUP BY字段與SELECT字段匹配。非聚合字段需使用ANY_VALUE()函數(shù),排序字段可使用MAX()等聚合函數(shù)。
b.Mapper.xml文件
同理,需檢查并調(diào)整SQL語(yǔ)句中的select查詢字段,確保符合ONLY_FULL_GROUP_BY規(guī)則。
六、不修改sql處理方法
如果不想修改SQL,可考慮關(guān)閉ONLY_FULL_GROUP_BY,有以下三種方式:
方案一:navcat處理
1. 打開(kāi)navcat,使用sql查詢
select @@GLOBAL .sql\_mode;
2. 去掉ONLY_FULL_GROUP_BY,重新設(shè)置值。
set @@global.sql\_mode='STRICT\_TRANS\_TABLES,NO\_ZERO\_IN\_DATE,NO\_ZERO\_DATE,ERROR\_FOR\_DIVISION\_BY\_ZERO,NO\_ENGINE\_SUBSTITUTION';
方案二: 修改配置my.ini文件
在MySQL安裝目錄下,修改my.ini文件
sql\_mode=STRICT\_TRANS\_TABLES,NO\_ZERO\_IN\_DATE,NO\_ZERO\_DATE,ERROR\_FOR\_DIVISION\_BY\_ZERO,NO\_AUTO\_CREATE\_USER,NO\_ENGINE\_SUBSTITUTION
隨后重啟MySQL數(shù)據(jù)庫(kù)
方案三:修改my.cnf文件
編輯my.cnf文件
vim /etc/my.cnf
在[mysqld]下面添加一行
sql\_mode=STRICT\_TRANS\_TABLES,NO\_ZERO\_IN\_DATE,NO\_ZERO\_DATE,ERROR\_FOR\_DIVISION\_BY\_ZERO,NO\_AUTO\_CREATE\_USER,NO\_ENGINE\_SUBSTITUTION
保存后重啟MySQL數(shù)據(jù)庫(kù)
七、升級(jí)后驗(yàn)證
完成上述步驟后,請(qǐng)逐一驗(yàn)證以下內(nèi)容:
1. 系統(tǒng)啟動(dòng)是否正常
2. 關(guān)鍵業(yè)務(wù)功能是否運(yùn)行穩(wěn)定
3. 數(shù)據(jù)庫(kù)連接與事務(wù)是否無(wú)誤
4. 日志中是否有SQL語(yǔ)法或兼容性警告
通過(guò)以上步驟,你就能順利完成CRMEB多商戶系統(tǒng)(Java)從舊版MySQL至MySQL 8的數(shù)據(jù)庫(kù)升級(jí)。如有疑問(wèn)或遇到未覆蓋的問(wèn)題,歡迎來(lái)CRMEB技術(shù)社區(qū)-多商戶系統(tǒng)(Java)模塊發(fā)帖反饋,Java項(xiàng)目組工作人員會(huì)協(xié)助您解決問(wèn)題。