MySQL 8.1正式发行!有哪些值得关注的新功能?
千呼万唤始出来的新版本MySQL 8.1及MySQL 8.0.34于2023年7月18日正式发行。从此,MySQL将开启创新版和稳定版同时发行的阶段。MySQL 8.1是MySQL的首个创新版,该版本主要增加了如下功能:
-
捕捉EXPLAIN FORMAT=JSON输出, 为EXPLAIN FORMAT=JSON增加INTO选项,可以将JSON格式的输出保存在一个用户变量中。
-
保留客户端注释,MySQL 8.1保留mysql客户端的注释,如果需要使用之前的行为,需要使用--skip-comments选项
-
MySQL Replication更改
SOURCE_RETRY_COUNT,CHANGE REPLICATION SOURCE TO语句中SOURCE_RETRY_COUNT的默认值改为10,这意味着,使用此选项和SOURCE_CONNECT_RETRY(60)的默认值,副本在重新连接尝试之间等待60秒,并在超时和故障转移之前以此速率尝试重新连接10分钟。
-
group_replication_set_as_primary() 及DDL语句,在选择一个新的主节点之前,group_replication_set_as_primary()函数需要等待所有事务完成前正在进行的DDL语句。
-
版本特定注释中使用的MySQL版本号现在支持由一个或两个数字组成的主版本,这意味着整个版本现在可以是五位数或六位数长。
-
强化关闭服务器过程的日志,随着MySQL服务器、插件和组件的启动和关闭消息的增加,强化关闭过程的日志,附加功能应该有助于故障排除和调试问题,特别是在服务器需要很长时间才能关闭的情况下。
-
增加了SHOW PARSE_TREE语句,该语句显示了select语句的json格式解析树。此语句仅用于测试和开发,而不是用于生产。它仅用于调试版本中
-
增加了tls-certificates- enforsed - validation系统变量,允许DBA在服务器启动时或使用ALTER INSTANCE RELOAD TLS语句在运行时重新加载证书时强制执行证书验证。启用强制后,发现证书无效时将在启动时停止服务器调用,防止在运行时加载无效证书,并发出警告。
-
添加了一些特定于组复制插件的状态变量,这些变量可以改进对网络不稳定的诊断和故障排除,为每个组成员提供有关网络使用情况、控制消息和数据消息的统计信息。
-
添加了服务器系统变量,用来控制使用LDAP可插拔身份验证连接到MySQL服务器的MySQL帐户在LDAP服务器关闭或无响应时必须等待的时间。对于以下简单且基于sasl的LDAP身份验证变量,新的默认超时为30秒,连接和响应超时只能通过Linux平台上的系统变量进行配置。有关更多信息,请参见设置LDAP可插拔身份验证的超时时间。
除了新增功能外,还做了以下调整,这部分内容基本上与MySQL 8.0.34一致。
用户管理方面,增加了一个系统变量“validate_password.changed_characters_percentage”用于密码验证。该变量用于配置用户在更改密码时必须修改的字符数量,数量以当前密码的字符数百分比计算。假设该变量值设为50,则新密码中至少有一半的字符需要修改。
MySQL审计方面,增加新的功能,在安装审计插件时,可以指定用户存储日志过滤条件的数据库。例如:
$> mysql -u root -D database_name -p < audit_log_filter_linux_install.sql
此外,MySQL审计增加了使用调度器组件来配置和执行循环任务,刷新内存缓存的新功能。
二进制日志方面,在libmysqlclient.so库中增加了新的函数mysql_binlog_open(),mysql_binlog_fetch(),及mysql_binlog_close(),使得开发者能够访MySQL服务器的二进制日志。
兼容性方面,改进了Windows的MSVC_CPPCHECK支持,并检查类似的MSVC警告“维护”模式。
Windows编译方面,改善了WIN_DEBUG_NO_INLINE=1的支持,使用量将超过库的65535个对象的限制。
此外,对robin-hood-hashing、ICU文件及ZSTD的版本等进行了升级。
由于MySQL提供了mysql shell 和mysqldump用于备份,因此,mysqlpump将进行降级处理,使用时将有警告提示,未来将弃用该产品。
用于复制的服务器变量“sync_relay_log_info”、“binlog_format”,在此版本中降级处理,未来将弃用该变量。因此,与其关联的“log_bin_trust_function_creators”和“log_statements_unsafe_for_binlog”也将降级使用,最终弃用。需要注意,“binlog_format”弃用后,MySQL的二进制日志格式仅支持“row-based”。
用于组复制的服务器变量“group_replication_recovery_complete_at”,及 “mysql_native_password”认证插件降级使用,未来将弃用。
此外,包括审计日志的传统过滤模式、mysql_ssl_rsa_setup程序,及密钥环文件插件等也进行降级处理,未来将弃用。
用户需要注意,以往的特定与版本的注释方式“/*!80034KEY_BLOCK_SIZE=1024*/或/*!80034 KEY_BLOCK_SIZE=1024*/ ”不考虑版本号后面的空格,但未来版本的该行为可能会发生变化。因此,从此版本开始,请用户在版本号后面加入空格使用,
SQL语法方面,此版本支持使用CURRENT_USER() 、SESSION_USER()、USER(), SYSTEM_USER()在建表语句或更改表语句中作为Varchar或TEXT类型字段的默认值。
除了上述提到的更改和弃用,MySQL 8.1及MySQL 8.0.34版本做了大量的错误修复,使得MySQL 8.0进入一个稳定的状态。详细的变更内容,请参照官网的发行一览。
整理作者介绍
徐轶韬,MySQL解决方案首席工程师。为中国金融、政府、航空运输等行业的MySQL用户提供相关产品的售前咨询,企业级产品介绍服务以及推广和普及MySQL数据库在社区的使用。公众号“MySQL解决方案工程师”运营者和内容作者。