隨著MySQL 8的普及與應用深入,將現有項目數據庫升級至新版本已成為提升性能與安全性的必要舉措。
本文針對CRMEB多商戶系統(Java)項目數據庫升級MySQL 8.0.33的全過程,提供詳盡的步驟說明與解決方案。內容涵蓋依賴升級、配置調整、代碼兼容性處理及SQL語句優化等關鍵環節,旨在幫助大家順利完成數據庫升級,規避常見問題,確保系統穩定運行。

一、準備工作
1. 準備一個MySQL數據庫,并導入現有數據。
2. 注意:若服務器內存為4G(例如使用寶塔面板),可能無法安裝MySQL8數據庫,考慮自行在服務器編碼式安裝后,外連到寶塔或其他面板上。
二、更換MySQL驅動依賴
在pom.xml中將MySQL驅動升級為8.0.33版本:

三、調整數據源配置
在application.yml(或application.properties)中,更新驅動類名:
修改
datasource: driver-class-name: com.mysql.jdbc.Driver
為
datasource: driver-class-name: com.mysql.cj.jdbc.Driver

四、代碼model類關鍵字處理
如果model類中包含rank之類的MySQL8保留關鍵字,需要進行處理。
添加@TableField(value = "xxxx")注解,如下圖

五、代碼sql處理
MySQL 8默認啟用ONLY_FULL_GROUP_BY,要求GROUP BY字段必須與SELECT中的非聚合字段一致,否則就會報錯。所以需要處理項目中使用GROUP BY 語句的地方。
a. MySQL-plus相關
在構建查詢時,確保GROUP BY字段與SELECT字段匹配。非聚合字段需使用ANY_VALUE()函數,排序字段可使用MAX()等聚合函數。

b.Mapper.xml文件
同理,需檢查并調整SQL語句中的select查詢字段,確保符合ONLY_FULL_GROUP_BY規則。
六、不修改sql處理方法
如果不想修改SQL,可考慮關閉ONLY_FULL_GROUP_BY,有以下三種方式:
方案一:navcat處理
1. 打開navcat,使用sql查詢
select @@GLOBAL .sql\_mode;

2. 去掉ONLY_FULL_GROUP_BY,重新設置值。
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數據庫
方案三:修改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數據庫
七、升級后驗證
完成上述步驟后,請逐一驗證以下內容:
1. 系統啟動是否正常
2. 關鍵業務功能是否運行穩定
3. 數據庫連接與事務是否無誤
4. 日志中是否有SQL語法或兼容性警告
通過以上步驟,你就能順利完成CRMEB多商戶系統(Java)從舊版MySQL至MySQL 8的數據庫升級。如有疑問或遇到未覆蓋的問題,歡迎來CRMEB技術社區-多商戶系統(Java)模塊發帖反饋,Java項目組工作人員會協助您解決問題。
CRMEB產品圈定期更新分享
????歡迎關注【CRMEB產品圈】????


