LTS轻量级分布式任务调度框架改造,手把手MySQL 5.x版本升级到MySQL 8.x

大家好,承接上一篇文章:开源推荐:一个支持实时,定时,Cron任务,轻量级分布式任务调度框架。如何搭建light-task-scheduler定时任务的环境可以参考上一篇。

开源推荐:一个支持实时,定时,Cron任务,轻量级分布式任务调度框架

这里开启了第二篇文章。主要是这个LTS轻量级分布式任务调度框架有比较久没有维护了,项目上面也没有反馈什么问题,定时任务也是比较稳定的执行,项目是支持Mysql 5.x,但是客户要求适配其公司升级Mysql 8.x,所以就有了这篇文章的记录。

那接下来我介绍如何对这个轻量级分布式任务调度框架进行适配MySQL 5.x 版本升级到MySQL 8.x 。

一、为什么升级到MySQL 8.x

项目上面MySQL 8.x 用得好好得,为什么升级到MySQL 8.x ?主要是有一些特性:

1.1 性能提升,对业务的查询有好处。

MySQL 8.x 在性能方面做了很多优化,包括更好的查询优化、内存管理和并行处理等,可以提供更快速、更高效的数据处理能力。

1.2 安全性增强,有什么漏洞可以及时得到官方修复支持。

MySQL 8.x 在安全性方面也做了很多改进,例如引入了新的密码插件和加密选项,加强了对数据的保护。

5.7.19及之前的版本。该漏洞允许低权限通过多种协议对服务器进行拒绝式攻击,也可以无需授权更新、插入、删除数据库中的可以访问的数据。

CVE-2018-2696 mysql: sha256_password 认证长密码拒绝式攻击该漏洞源于MySQL sha256_password认证插件,该插件没有对认证密码的长度进行限制,而直接传给my_crypt_genhash()用SHA256对密码加密求哈希值。该计算过程需要大量的CPU计算,如果传递一个很长的密码时候,会导致CPU耗尽。而且该公式Mysql的实现中使用alloca()进行内存分配,无法对内存栈溢出保护,可能导致内存泄露、进程崩溃,从而可能实现代码执行。

MySQL <= 5.6.38 和MySQL <= 5.7.20 受影响。mariadb分支版本不受该漏洞影响。

Mysql 官方也公布了一些漏洞情况,建议用户升级版本。

1.3 新特性和功能

MySQL 8.x 引入了许多新特性和功能,例如物化视图、在线DDL、更好的JSON支持等,这些可以提供更多的开发选项和更好的开发体验。

1.4 更好的兼容性

MySQL 8.x 与更多现代的操作系统和硬件平台兼容,可以更好地满足各种应用场景的需求。

1.5 更好的社区支持

MySQL 8.x 作为官方的数据库产品,得到了Oracle和开源社区的广泛支持,可以获得更好的技术支持和资源。

LTS轻量级分布式任务调度框架改造,手把手MySQL 5.x版本升级到MySQL 8.x

其实,更重要的一点是是企业对数据安全方面的重视,升级一下得到比较好的保护。同时还愿意花钱,投资源做这个事情。

二、MySQL 8.x 有哪些功能和特性?

MySQL 8.0中的更改了什么,我阅读了一下官网,简单的总结以下几点:

MySQL 8.0+ 引入了许多新功能和特性,以下是一些主要的:

2.1 JSON扩展

MySQL 8.0提供了更多的JSON函数和操作符,如JSON提取和修改路径,以及JSON值比较等。

2.2 新的窗口函数

例如ROW_NUMBER(), LAG(), LEAD()等窗口函数,提供了更强大的数据处理能力。

2.3 公用表表达式(CTE)

MySQL 8.0开始支持Common Table Expressions (CTEs),允许用户定义一个临时的结果集,这在复杂查询中尤其有用。

2.4 新数据类型

例如JSON和UUID数据类型,提供了更多的数据存储选择。

2.5 新的日期和时间函数

例如DAYOFWEEK(), WEEKOFYEAR()等,这些函数提供了更强大的日期和时间处理能力。

2.6 性能改进

MySQL 8.0在查询优化、索引、存储引擎等方面做了许多改进,以提高性能。安全性增强:包括更强大的密码策略,密码哈希算法的改进,以及支持LDAP等。

2.7 InnoDB的变化

InnoDB是MySQL默认的存储引擎,在MySQL 8.0中,InnoDB在自增、索引、加密、死锁、共享锁等方面做了大量的改进和优化。

2.8 GIS地理支持

空间参考系统(SRS),以及空间数据类型和空间索引的支持。高可用性:InnoDB集群为数据库提供了集成的本地高可用性解决方案。

LTS轻量级分布式任务调度框架改造,手把手MySQL 5.x版本升级到MySQL 8.x

以上只是MySQL 8.0+的一部分新特性,更多详细信息可以查阅官方文档或相关资料。具体可以参考官网:https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html

三、MySQL 5.x版本升级到MySQL 8.x
3.1 Mysql 8.x 软件安装

安装Mysql8.x,这里为了保留我之前的Mysql5.x,我采用的是Docker的方式安装。那么Docker怎么使用呢?可以参考我之前发布的一些文章,有详细的教程。这里的话,我就直接略过这一节了。

可以参考之前写的文章:

Docker 技术系列之安装多版本Mysql5.6和Mysql5.7

Docker 技术系列之安装Docker Desktop for Mac

那么我这里为了方便就直接通过docker安装Mysql8.0.29了。

LTS轻量级分布式任务调度框架改造,手把手MySQL 5.x版本升级到MySQL 8.x

# 拉取镜像

docker pull mysql:8.0.29

docker run --restart=always --name mysql --privileged=true -d -p 3307:3306 -v D:\docker\mysql8\conf\my.cnf:/etc/mysql/my.cnf -v D:\docker\mysql8\logs:/logs -v D:\docker\mysql8\data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0.29

3.2 驱动类更换和升级

pom.xml  由 5.1.26

<mysql.version>5.1.26</mysql.version>

变更为:

<mysql.version>8.0.33</mysql.version>

配置如下图:

LTS轻量级分布式任务调度框架改造,手把手MySQL 5.x版本升级到MySQL 8.x

3.3 修改Mysql相关的配置信息

把Mysql的地址和端口号修改成需要升级的Mysql地址,并添加驱动类配置。

configs.jdbc.url=jdbc:mysql://127.0.0.1:3306/lts
configs.jdbc.username=root
configs.jdbc.password=123456

修改为以下配置

configs.jdbc.url=jdbc:mysql://127.0.0.1:3307/lts
configs.jdbc.username=root
configs.jdbc.password=123456
configs.jdbc.driver.class.name=com.mysql.cj.jdbc.Driver
3.4 修改Mysql读取配置信息

修改读取配置的公共类ExtConfig,并添加以下配置:

String JDBC_DRIVER_CLASS_NAME = "jdbc.driver.class.name";

配置如下图:

LTS轻量级分布式任务调度框架改造,手把手MySQL 5.x版本升级到MySQL 8.x

3.5 修改druid相关的配置信息

因为这个框架用的是比较低版本的druid ,同时LTS轻量级分布式任务调度框架写的时候默认就是低版本的驱动类:com.mysql.jdbc.Driver。所以这里需要增加读取配置文件的驱动类配置。

配置如下图:

LTS轻量级分布式任务调度框架改造,手把手MySQL 5.x版本升级到MySQL 8.x


修改MysqlDataSourceProvider,添加以下驱动类的设置:

String driverClassName = config.getParameter(ExtConfig.JDBC_DRIVER_CLASS_NAME);
dataSource.setDriverClassName(driverClassName);

3.5 修复查询监控定时任务报表报错

因为Mysql从5.x升级到Mysql8.x 会导致 groupBy(” timestamp ASC “) 的语法不被允许。

LTS轻量级分布式任务调度框架改造,手把手MySQL 5.x版本升级到MySQL 8.x


官方在MySQL 8.0不支持GROUP BY ASC DESC,文章可参考:https://dev.mysql.com/worklog/task/?id=8693

那我们看看这里的执行情况:

MySQL 5.x 情况

LTS轻量级分布式任务调度框架改造,手把手MySQL 5.x版本升级到MySQL 8.x


MySQL 8.x 情况

LTS轻量级分布式任务调度框架改造,手把手MySQL 5.x版本升级到MySQL 8.x


解决方法可以是通过:

方式一:解决办法如下:找到my.cnf,添加一下配置:

sql_mode=STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION

方式二:修改框架代码,这几个类用到该语法都需要进行调整。全选搜索:groupBy(” timestamp ASC “),然后去掉ASC即可。

LTS轻量级分布式任务调度框架改造,手把手MySQL 5.x版本升级到MySQL 8.x


验证步骤参考第一篇文章继续启动即可,启动后效果图如下:

LTS轻量级分布式任务调度框架改造,手把手MySQL 5.x版本升级到MySQL 8.x

四、MySQL客户端 连接数据库错误问题
Mysql 8.x 连接失败问题

LTS轻量级分布式任务调度框架改造,手把手MySQL 5.x版本升级到MySQL 8.x


可以修改以下配置即可

LTS轻量级分布式任务调度框架改造,手把手MySQL 5.x版本升级到MySQL 8.x


重新连接

LTS轻量级分布式任务调度框架改造,手把手MySQL 5.x版本升级到MySQL 8.x

ps:调试一个框架源码不容易,写一篇实践类型的文章也容易,需要耗费的比较长的时间去整理素材,编辑,发布等。

四、最后

一个致力于分享技术、职场技能和创业经验方面的知识和经验,内容包括但不限于Java技术、技术趋势、开源项目和技术架构公众号。持续关注互联网和科技的发展,分享人工智能和其他前沿技术的信息,陪你一起成长。

欢迎关注,星标,以及收藏,防止想用的时候没有找到。这样每次新文章推送才会第一时间出现在你的订阅列表里。 世间千变万化,我们才不会擦肩而过……


原文始发于微信公众号(souvc):LTS轻量级分布式任务调度框架改造,手把手MySQL 5.x版本升级到MySQL 8.x

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/205973.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!