随着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项目组工作人员会协助您解决问题。