MySQL和MySQL驱动mysql-connector-java升级到8.0.X版本

目录

一、MySQL升级到8.0.X版本

1.1 升级的原因及MySQL8.0版本新特性

1.2 下载MySQL

1.3 备份数据

1.4 卸载原版本MySQL

1.5 安装下载的新版本。

1.6 MySQL升级后的兼容性问题

二、升级MySQL驱动mysql-connector-java到8.0.X版本

2.1 为什么要升级驱动版本

2.2 升级版本

扫描二维码关注公众号,回复: 14207519 查看本文章

2.3 修改配置

2.4 mysql-connector-java升级到8.0之后的一些兼容问题

三、MySQL8.0和5.7性能对比

3.1 InnoDB Row Operations

3.2 Transactions Processed

3.3 CPU Resources


一、MySQL升级到8.0.X版本

1.1 升级的原因及MySQL8.0版本新特性

比MySQL 5.7快2倍,仅这一个理由就够了!而且,还有其他许多很好的新特性:

1. 性能:MySQL 8.0 的速度要比 MySQL 5.7 快 2 倍。MySQL 8.0 在以下方面带来了更好的性能:读/写工作负载、IO 密集型工作负载、以及高竞争("hot spot"热点竞争问题)工作负载

2. NoSQL:MySQL 从 5.7 版本开始提供 NoSQL 存储功能,目前在 8.0 版本中这部分功能也得到了更大的改进。该项功能消除了对独立的 NoSQL 文档数据库的需求,而 MySQL 文档存储也为 “schema-less 模式的 JSON 文档”提供了多文档事务支持和完整的 ACID 合规性。

3. 窗口函数(Window Functions):从 MySQL 8.0 开始,新增了一个叫窗口函数的概念,它可以用来实现若干新的查询方式。窗口函数与 SUM()、COUNT() 这种集合函数类似,但它不会将多行查询结果合并为一行,而是将结果放回多行当中。即窗口函数不需要 GROUP BY。

4. 隐藏索引:在 MySQL 8.0 中,索引可以被“隐藏”和“显示”。当对索引进行隐藏时,它不会被查询优化器所使用。我们可以使用这个特性用于性能调试,例如我们先隐藏一个索引,然后观察其对数据库的影响。如果数据库性能有所下降,说明这个索引是有用的,然后将其“恢复显示”即可;如果数据库性能看不出变化,说明这个索引是多余的,可以考虑删掉。

5. 降序索引:MySQL 8.0 为索引提供“按降序方式”进行排序的支持,在这种索引中的值也会按降序的方式进行排序。

6. 通用表表达式(Common Table Expressions CTE):在复杂的查询中使用嵌入式表时,使用 CTE 使得查询语句更清晰。

7. UTF-8 编码从 MySQL 8 开始,使用 utf8mb4 作为 MySQL 的默认字符集。

8. JSON:MySQL 8 大幅改进了对 JSON 的支持,新增基于路径查询参数从 JSON 字段中抽取数据的 JSON_EXTRACT() 函数,以及用于将数据分别组合到 JSON 数组和对象中的 JSON_ARRAYAGG() 和 JSON_OBJECTAGG() 聚合函数。

9. 可靠性:InnoDB 现在支持表 DDL 的原子性,也就是 InnoDB 表上的 DDL 也可以实现事务完整性了,要么失败回滚,要么成功提交,不至于出现 DDL 时部分成功的问题,此外还支持 crash-safe 特性,元数据存储在单个事务数据字典中。

10. 高可用性(High Availability)InnoDB 集群为您的数据库提供集成的原生 HA 解决方案。

11. 安全性:对 OpenSSL 的改进、新的默认身份验证、SQL 角色、密码强度、授权。

详细更新说明:https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-11.html

官方发布说明:https://blogs.oracle.com/mysql/announcing-general-availability-of-mysql-80

MySQL 8 正式版的新增功能:https://mysqlserverteam.com/whats-new-in-mysql-8-0-generally-available/

参考资料:https://www.cnbeta.com/articles/soft/718465.htm

1.2 下载MySQL

官网:https://dev.mysql.com/downloads/mysql/

到官网,下载MySQL Community Server,这个是日常使用版本,选择要安装的操作系统,下载对应的安装包,下载最新的稳定版本即可。

 

1.3 备份数据

保留数据SQL脚本。如果没有,则可以使用Navicat等工具进行数据备份。

1.4 卸载原版本MySQL

直接按照普通软件卸载的方式卸载即可。

1.5 安装下载的新版本。

和以前比较,8.0版本安装步骤简单了许多,一步一步安装即可。

1.6 MySQL升级后的兼容性问题

兼容性还是可以的。目前为止,笔者还没遇到有兼容问题。

虽然网上说会有一点兼容问题,但是还是应该升级,不能因噎废食,利益明显大于弊端。当然,也要考虑实际情况,最好不要在业务忙碌期间进行,可以选择一个不是很忙的时间,作为一个事项来做升级,然后进行充分验证和修改,保证升级后的功能正常。

二、升级MySQL驱动mysql-connector-java到8.0.X版本


2.1 为什么要升级驱动版本

笔者原来安装MySQL 8.0.X版本后,驱动没升级,还是使用mysql-connector-java 5.1.47,经验证:功能也没问题,能够连接数据库。

但是一定要升级,升级后使用新的驱动类,无论是启动加载速度,还是数据库查询速度性能,都有明显提升。

笔者本地弄了个实例,对比了下,虽然数据量小,差距不明显,但是还是明显看到性能提升:

2.2 升级版本

直接下载最新版本jar包或,修改引用的版本号。可以到maven的一些搜索网站(如https://mvnrepository.com/)进行搜索可用版本。

 <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.16</version>
</dependency>

2.3 修改配置

1. 驱动类变了,原来是由原来的com.mysql.jdbc.Driver改为com.mysql.cj.jdbc.Driver。

不修改会影响性能,启动过程中有告警:

Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.

修改后的驱动程序通过SPI自动注册,通常不需要手动加载驱动程序类。

2. jdbc_url上的时区变为必须配置,否则会启动报错。

Caused by: com.mysql.cj.exceptions.InvalidConnectionAttributeException: The server time zone value '�й���׼ʱ��' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.

如:

jdbc:mysql://localhost:3306/dbname?characterEncoding=utf-8&useSSL=true&serverTimezone=GMT


2.4 mysql-connector-java升级到8.0之后的一些兼容问题

基本还是兼容的,但是有一些不兼容的地方,目前笔者已知的有2点:

1、如果数据库表自增主键id是bigint类型,原来版本执行后返回的id是Long类型,现在改为了BigInteger类型,如果是使用mybatis基本没问题;如果是自定义的JDBC框架就要格外注意看处理是否有问题,类型是否存在不匹配导致问题。

2、日期类型的字段处理可能存在问题,如表中字段为TIMESTAMP,之前查询返回能够返回毫秒值,升级后不再返回。如果在查询时有使用日期转换函数转换为String,并且对毫秒值进行了处理,那么升级后会报错,需要去掉对毫秒值得处理。如果查询返回直接映射为Date就没问题。

三、MySQL8.0和5.7性能对比

有一份做的很好的性能对比资料,笔者这里就不做重复工作了,参考这个资料,可以看出MySql8.0版本的性能提升是实实在在的。

资料地址:https://severalnines.com/blog/mysql-performance-benchmarking-mysql-57-vs-mysql-80

转载自上面资料的性能对比图:

3.1 InnoDB Row Operations

3.1.1 InnoDB rows read

 3.1.2 InnoDB rows deleted

3.1.3 InnoDB rows inserted

3.1.4 InnoDB rows updated 

3.2 Transactions Processed

3.2.1 事务处理时间/线程数图表

 3.2.2 事务处理数/线程数图表

 3.2.3 单独读写事务处理数/线程数图表

3.3 CPU Resources

猜你喜欢

转载自blog.csdn.net/chinawangfei/article/details/122805490