时隔不到三个月,MySQL8.0.17版本于2019年7月22日正式发布。
这个版本是作为一个维护版本发布的,里面除了修复错误之外,版本还添加了一些新的功能。详细的内容请参阅:https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-17.html
在这个版本里面的重点内容包括:
通过克隆进行部署
克隆使用MySQL Shell执行,其过程完全自动化。可以从一个正在运行的服务器克隆其状态给一个新创建的服务器。之前必须使用mysqldump或backup来创建初始状态。使用该功能,假设要将新服务器添加到正在运行的MySQL InnoDB集群,则只需启动新服务器并告诉它加入集群即可。克隆功能包括克隆本地副本、克隆远程副本、克隆远程配置、克隆复制位置信息以及支持克隆加密数据库。
多值索引
多值索引可以索引JSON数组。多值索引是多个索引记录可以指向同一数据记录的索引。以下面的JSON文档为例:{user: John, user_id: 1, addr: [ {zip:94582} , {zip:94536} ] }。在这里,如果我们想要搜索所有邮政编码,必须在索引中有两个记录,每个对应文档中的每个邮政编码,两个都指向同一个文档。这样的索引是由语句CREATE INDEX zips ON t1((CAST(data-> '$.addr[*].zip'AS UNSIGNED ARRAY)));创建的。实际上,它是一个函数索引,使用CAST()函数将JSON数组转换为SQL类型的数组。一旦创建了多值索引,优化器就会自动使用它,就像任何单值索引一样。
多值索引通常用于涉及 MEMBER OF(),JSON_CONTAINS()和JSON_OVERLAPS()的查询中。JSON_OVERLAPS()函数是此版本中新增加的JSON功能。 MEMBER OF()函数是新添加的标准SQL语法。
JSON模式
添加对JSON模式的支持。通过JSON_SCHEMA_VALID(,)函数实现根据JSON模式验证JSON文档的功能。JSON_SCHEMA_VALID的第一个参数是JSON Schema定义,第二个参数是用户想要验证的JSON文档。JSON_SCHEMA_VALID()作为CHECK约束非常有用。
JSON_SCHEMA_VALIDATION_REPORT(,)函数,该函数打印出一个结构化的JSON对象,在出现错误时提供更详细的JSON Schema验证报告。
优化器改进
子查询优化:将NOT EXISTS和NOT IN转换为反半连接。转换提供了更好的成本计划,即通过将子查询表引入顶层查询的计划,并通过将半连接和反连接合并在一起,可以更灵活地对执行计划中的表重新排序,因此会找到更好的计划。
确保SQL条件中的所有谓词完整:用不等式代替不完整的谓词。解析器、优化器和执行器只需处理完整的谓词。
将CAST添加到FLOAT / DOUBLE / REAL以支持根据SQL标准对FLOATING数据类型进行强制转换操作。这使显式强制转换与隐式强制转换保持一致,
Volcano iterator
这项工作是基于Volcano模型,目标是简化代码库,启用哈希连接等新功能,并启用更好的EXPLAIN和EXPLAIN ANALYZE。
Volcano iterator semijoin在迭代器执行器中实现了所有形式的半连接。
迭代器执行程序分析查询,通过支持窗口函数,汇总和最终删除重复数据,扩展了迭代器执行程序可以处理的分析查询的范围。
字符集
utf8mb4添加一个新的utf8mb4_0900_bin排序规则。新的排序规则类似于utf8mb4_bin排序规则,区别在于utf8mb4_0900_bin使用utf8mb4编码字节并且不添加填充空间。
复制功能
加密二进制日志缓存,确保在加密二进制日志文件同时,也对二进制日志缓存溢出到磁盘时创建的临时文件进行加密。
对远程服务器使用mysqlbinlog时允许压缩,mysqlbinlog启用了协议压缩。用户可以使用mysqlbinlog连接到远程服务器,并在通过网络传输二进制日志时请求协议压缩支持。
群组复制
克隆插件集成在分布式恢复中,确保用户可以在新服务器中启动群组复制过程,并自动克隆来自捐赠者的数据,并在没有进一步干预的情况下加快速度。
跨版本策略定义了在群组重新配置期间,维护复制安全性所需的行为和功能更改。
MySQL路由器
MySQL 8.0.17为MySQL路由器添加了监控基础架构和监控REST接口。希望监控路由器的应用程序和用户可以获得对配置数据,性能信息和资源使用情况的结构化访问。此外,MySQL路由器已经与MySQL Group Replication进一步集成,它现在可以处理由群组复制协议发出的视图更改通知。
用于监控的REST接口包括,用于服务运行状况的REST端点、元数据缓存的REST端点、用于路由的REST端点、路由器应用程序的REST端点。
通过群组复制通知的元数据缓存失效,扩展了路由器功能,用以处理群组视图更改的通知。从xplugin接收到群组视图更改通知时,元数据缓存将使该群组的缓存无效,并触发刷新群组状态。
MTR测试套件
将需要MyISAM的测试用例移动到单独的.test文件,允许MTR测试套件在没有MyISAM引擎的情况下构建的服务器上运行。
其他
支持超过60个字符的主机名,确保服务器能够以最多255个字符的主机名运行。
将互斥锁定顺序检查添加到服务器,提供了一种方法和工具来强制运行时执行没有死锁。
控制哪些插件可以传递给-early-plugin-load,为PLUGIN_OPT_ALLOW_EARLY_LOAD标志集添加了一个新的插件标志,以便插件作者可以为-early-plugin-load启用他们的插件。以使用-early-plugin-load加载。
在MySQL客户端中添加OS用户作为连接属性,为“mysql”客户端添加了一个新的连接属性,该属性添加了有关mysql正在执行的OS帐户的信息。这使DBA可以更轻松地通知人们在服务器上运行耗时的查询。
为mysqldump的-set-gtid-purged命令行参数添加了一个新的允许值。SET -gtid-purged= comments将输出SET @GLOBAL。注释中的GTID_PURGED信息。
current_thd()的组件服务,使得从组件调用current_thd()成为可能,并通过这种方式获得一个指向THD的不透明指针,我们可以将这个指针传递给其他服务。在插件中调用current_thd()而不是使用mysqld中的全局current_thd符号将有助于更简洁的插件。
通过阅读以上内容,您会发现MySQL在持续不断的完善,并且为未来发展的功能持续奠定基础,尤其是对Innodb 集群的支持,包括群组复制功能的改进,以及MySQL Shell的功能完善等等。
试用新版本请通过 https://dev.mysql.com/downloads/mysql/ 下载。
感谢您使用MySQL,欢迎持续关注!