将mysql从5.5.25升级到8.0.12

将mysql从5.5.25升级到8.0.12
将mysql从5.5.25升级到8.0.12过程中遇到几个问题,记录如下:

将数据库安装好后,导入原来的数据,启动tomcat,报错unable to load authentication caching_sha2_plugin,解决办法如下:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER; #修改加密规则
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'; #更新一下用户的密码

FLUSH PRIVILEGES; #刷新权限

参考:https://blog.csdn.net/u010026255/article/details/80062153

网上也有说通过修改my.ini,加入

[mysqld]
default_authentication_plugin=mysql_native_password

经过我的测试,不成功,不知道为什么 。

上述问题解决后,Tomcat启动时又遇到:java.math.BigInteger cannot be cast to java.lang.Long,无法将类型从biginteger转换到Long型,网上有说改原始代码的,我查看了原始代码里的mapper文件,里面并没有bigInteger和Long等字,应该是驱动或者iBatis解析的问题,将驱动升级到和mysql同版本的8.0.12后,上述问题消失,又遇到另一个问题“Unsupported major.minor version 52.0”也就是运行环境不支持1.8,我的开发环境和运行环境都是1.7不可能变更到1.8,只能找官方关于mysql-connector-java和JDK版本的关系,官方文档地址为:

https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-versions.html

Connector/J version JDBC version MySQL Server version JRE Supported jDK Required for Compilation Status
8.0 4.2 5.6, 5.7, 8.0 1.8.x 1.8.x General availability. Recommended version.
5.1 3.0, 4.0, 4.1, 4.2 5.6, 5.7, 8.0 1.5.x, 1.6.x, 1.7.x, 1.8.x 1.5.x and 1.8.x General availability
上图显示8.0以上的connector驱动都需要JDK1.8支持,5.1.x版的驱动程序也是支持8.0.*mysql的,于是下载一个较新的mysql-connector-java-5.1.46(原来5.1.21),再次启动tomcat,无报错了!

项目运行一段时间后,又有报错:

Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre

网上查了一下,意思是5.7之后的版本默认情况下开启ONLY_FULL_GROUP_BY SQL模式,会导致这个问题,修改my.ini,加入

[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

也就是去掉sql_mode中的ONLY_FULL_GROUP_BY,然后重启mysql,重启TOMCAT,项目运行正常了。

网上有说通过set @@sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'修改全局设置的,经我测试不能成功,有人说全局设置只对后来新建的数据库有效。我没有验证。有知道的请留言!

总结就是:生产环境下,不要轻易变更版本!
原文地址https://www.cnblogs.com/yesok/p/11457316.html

上一篇:ARM 推出全新 CPU 和 GPU:首次基于 Armv9 指令集,性能显著提升


下一篇:linux查询内存、CPU、硬盘等系统信息的命令