今天MySQL官方发布8.0.18版本,可以直接从dev.mysql.com下载。此版本除了修复一些BUG,还增加了一些新功能,如hash join。
接下来我们总结下8.0.18版本中一些新特性:
1、SQL
1.1、HashJoin
在8.0.18版本中新增了hashjoin功能,可以参考我们之前发布的文章:《Oracle放大招:MySQL 即将支持 Hash Join》 。例如,SELECT * FROM t1 JOIN t2 ON t1.col1 = t2.col1;可以在8.0.18中使用哈希联接执行,在大多数情况下比当前的块嵌套循环算法更高效。
1.2、EXPLAIN ANALYZE
支持EXPLAIN ANALYZE,也是基于CBO的一些新功能。使用它可以估算成本、查看实际执行的统计数据,包括第一条记录的返回时间,全部记录返回时间,返回记录的数量以及循环数量,EXPLAIN还将可以使用新的输出格式,树状输出。
1.3、Iterator UNION
在新的iterator executor框架下优化UNION,UNION ALL,WITH RECURSIVE和不规范的SELECT COUNT(*)等语句,详情参考:https://dev.mysql.com/worklog/task/?id=13000
1.4、类型转换注入到项目树中
将表达式和条件内的隐式类型转换操作添加到项目树中,这些表达式和条件在提供的参数数据类型与预期数据之间可能存在不匹配的情况。这项工作代表了内部优化,对用户没有直观的影响。
2、GIS
ST_Distance计算地理几何的所有组合之间的距离,将对地理几何的支持从仅多点和点扩展到点,线串,面,多点,多线串,多面,几何集合的所有组合。
3、仅支持OpenSSL
从MySQL代码库中删除了对wolfSSL和yaSSL的支持。未来,MySQL将仅使用OpenSSL作为其SSL / TLS库。
4、生成随机密码
CREATE USER / ALTER USER / SET PASSWORD语句添加了语法,以生成强随机密码,并将其作为结果集行返回给客户端。此功能使用户更容易创建强密码。添加的语法是:
CREATE USER user IDENTIFIED BY RANDOM PASSWORD
ALTER USER user IDENTIFIED BY RANDOM PASSWORD
SET PASSWORD [FOR user] TO RANDOM。
5、压缩
支持更多的压缩选项。扩展了MySQL协议,以处理更多的客户端-服务器压缩选项,而不仅仅是zlib。客户端和服务器之间的初始握手将基于新的功能标志选择两者都支持的最佳压缩方法。压缩方法将由客户端和服务器选项的交集定义。两者都可以是zlib,zstd和未压缩的任何组合。压缩的优先顺序为zlib,zstd和未加密。即,如果服务器具有“未加密的zstd”,而客户端具有“ zlib的未加密zstd”,则将使用zstd压缩。也可以指定zstd的压缩级别。
6、特权Replication
在复制通道上实现了特权检查。其目前是实现从不受信任的源到受信任的目标的安全复制,即建立从安全边界的“外部”到“内部”的复制流。
7、Group Replication
7.1、group_replication_exit_state_action增加OFFLINE_MODE模式
该group_replication_exit_state_action选项用于指定当服务器无意离开组时,也就是暂时不复制但是不离开组。新OFFLINE_MODE行为将关闭所有连接,并禁止不具有CONNECTION_ADMIN或SUPER特权的用户建立新连接,类似于现有READ_ONLY模式。
7.2、TLS 1.3支持
在GCS / XCom层中实现了TLS 1.3支持。这样就可以在组复制中的所有组成员之间使用TLS 1.3来确保通信的安全。
7.3、组复制实现了内部消息服务
MySQL模块可以使用该服务通过组复制的现有组通信连接将带有标识标签的通用消息传输给所有组成员。此改进对用户透明。
8、路由
8.1、开放MySQL Routers秘钥
允许Router Admin用户使用命令列出存储在密钥串中的帐户,从密钥串中删除帐户,更改密钥串中帐户的密码以及更改密钥,以及更改主密钥串中的文件名位置。
8.2、增加日志的时间细粒度
MySQL路由的日志文件实现了亚秒级的时间戳精度。时间戳精度可以使用路由器配置文件进行配置。
9、MTR测试套件
将需要MyISAM的部分移动到单独的.test文件中。这使MTR测试套件可以在没有MyISAM引擎的情况下在服务器上运行。
10、其他
InnoDB:新增参数innodb_idle_flush_pct以在空闲时控制写IOPs。目的是减少写IO,以延长闪存的寿命。此功能基于Facebook的贡献,请参见bug#88566 。
动态链接Protobuf ,改变了Protobuf与服务器的链接方式。MySQL SQL开发人员希望在XPlugin之外(例如在复制中)使用Protobuf,之前是不可能的,因为Protobuf不能与一个以上的组件静态链接,因为它保持内部状态。新版本的解决方案是动态链接它。
加大max_prepared_stmt_count最大值,目前支持的范围从1到400万。默认设置为16K。
将sys Schema的源代码移至main server资料库中,并且通常将sys Schema实现与服务器集成在一起。
错误消息参数的编译时检查。实现了CMake配置选项,可在编译时检查错误消息参数的数量和类型。默认情况下,选项-DCHECK_ERRMSG_FORMAT为OFF。其目的是使开发人员能够在编译时检测错误,而不是在运行时获取意外错误。
11、弃用
MySQL 8.0.18不会删除任何功能,但会将某些功能标记为8.0中已弃用。不推荐使用的功能将在未来的大版本中删除。
在libmysql中弃用MYSQL_PWD环境变量的使用,即如果没有提供密码,libmysql将从OS环境变量MYSQL_PWD中读取密码。不鼓励使用此功能,因为环境变量可以由本地用户检查。要求用户使用其他更安全的机制来存储密码。
弃用–relay-log-info-file和–master-info-file。解决了以下两个参数警告的问题:Relay-log-info-file和master-info-file。这些应该已经分别与其“父”选项relay_log_info_repository = FILE和master_info_repository = FILE一起弃用。
弃用slave-rows-search-algorithms。指定复制应用程序在应用UPDATE或DELETE行事件时如何查找表中的行。从8.0开始,此选项的默认值为HASH_SCAN和INDEX_SCAN,这对于性能和正确性而言始终是最佳的。因此,最好不要使用替代算法。
弃用log_bin_use_v1_row_events。当前默认值为V2行事件。V2是MySQL 5.6中引入的,从那时起,MySQL可以解析和解释v1和v2行事件。
弃用WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS。用户应使用WAIT_FOR_EXECUTED_GTID_SET而不是WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS。
详细的更新日志可以参考
https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-18.html