隨著MySQL 8的普及與應(yīng)用深入,將現(xiàn)有項目數(shù)據(jù)庫升級至新版本已成為提升性能與安全性的必要舉措。
本文針對CRMEB多商戶系統(tǒng)(Java)項目數(shù)據(jù)庫升級MySQL 8.0.33的全過程,提供詳盡的步驟說明與解決方案。內(nèi)容涵蓋依賴升級、配置調(diào)整、代碼兼容性處理及SQL語句優(yōu)化等關(guān)鍵環(huán)節(jié),旨在幫助大家順利完成數(shù)據(jù)庫升級,規(guī)避常見問題,確保系統(tǒng)穩(wěn)定運行。
一、準(zhǔn)備工作
1. 準(zhǔn)備一個MySQL數(shù)據(jù)庫,并導(dǎo)入現(xiàn)有數(shù)據(jù)。
2. 注意:若服務(wù)器內(nèi)存為4G(例如使用寶塔面板),可能無法安裝MySQL8數(shù)據(jù)庫,考慮自行在服務(wù)器編碼式安裝后,外連到寶塔或其他面板上。
二、更換MySQL驅(qū)動依賴
在pom.xml中將MySQL驅(qū)動升級為8.0.33版本:
三、調(diào)整數(shù)據(jù)源配置
在application.yml(或application.properties)中,更新驅(qū)動類名:
修改
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中的非聚合字段一致,否則就會報錯。所以需要處理項目中使用GROUP BY 語句的地方。
a. MySQL-plus相關(guān)
在構(gòu)建查詢時,確保GROUP BY字段與SELECT字段匹配。非聚合字段需使用ANY_VALUE()函數(shù),排序字段可使用MAX()等聚合函數(shù)。
b.Mapper.xml文件
同理,需檢查并調(diào)整SQL語句中的select查詢字段,確保符合ONLY_FULL_GROUP_BY規(guī)則。
六、不修改sql處理方法
如果不想修改SQL,可考慮關(guān)閉ONLY_FULL_GROUP_BY,有以下三種方式:
方案一:navcat處理
1. 打開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ù)庫
方案三:修改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ù)庫
七、升級后驗證
完成上述步驟后,請逐一驗證以下內(nèi)容:
1. 系統(tǒng)啟動是否正常
2. 關(guān)鍵業(yè)務(wù)功能是否運行穩(wěn)定
3. 數(shù)據(jù)庫連接與事務(wù)是否無誤
4. 日志中是否有SQL語法或兼容性警告
通過以上步驟,你就能順利完成CRMEB多商戶系統(tǒng)(Java)從舊版MySQL至MySQL 8的數(shù)據(jù)庫升級。如有疑問或遇到未覆蓋的問題,歡迎來CRMEB技術(shù)社區(qū)-多商戶系統(tǒng)(Java)模塊發(fā)帖反饋,Java項目組工作人員會協(xié)助您解決問題。