Documentation Home
MySQL Shell 8.0 发行说明  /  MySQL Shell 8.0.31 的变化(2022-10-11,全面上市)

MySQL Shell 8.0.31 的变化(2022-10-11,全面上市)

修复了 AdminAPI 错误

  • 从 8.0.26 升级到 8.0.27 或更高版本的集群只能访问 8.0.26 中可用的组复制成员操作。升级后的会员无法使用8.0.26之后推出的任何操作,例如 mysql_start_failover_channels_if_primary8.0.27推出的。

    因此,尝试创建副本集群时出错。

    从此版本开始,createReplicaCluster() 使用 重置目标实例的组副本成员操作 group_replication_reset_member_actions()。(漏洞#34465006)

  • clusterSet.setRoutingOption(option, null)将所有路由选项重置为其默认值,而不是仅重置指定的选项。(缺陷号 34458017)

  • cluster.setOption()如果集群是 ClusterSet 的成员,则 无法使用 更改集群的选项 。发生运行时错误。(漏洞#34457903)

  • 无法 cluster.fenceWrites() 在副本集群上使用。

    从这个版本开始,可以 cluster.fenceWrites() 在 INVALIDATED 副本集群上使用。此外,如果针对super_read_only禁用的副本集群运行,它将启用它。

    如果 cluster.fenceWrites() 在健康的副本集群上运行,则不会进行任何更改。

    无法 cluster.unfenceWrites() 在副本集群上使用。(漏洞#34417802)

  • 如果 ClusterSet 的主集群负载很重,则使用通信堆栈将实例重新加入副本集群会 MYSQL导致错误。重新加入过程会在 ClusterSet 的主集群上重新创建复制帐户,并且此事务需要很长时间才能复制到组复制所需的副本集群。(缺陷号 34264094)

  • 在某些情况下,副本上的事务大小可能大于源上的事务大小。在 ClusterSets 中,这可能会导致 ClusterSet 复制通道出现问题。为避免此问题,进行了以下更改:

    • group_replication_transaction_size_limit 在副本集群中设置为最大值,并将原始值存储在元数据模式中,以便在发生切换或故障转移时可以恢复。

    • group_replication_transaction_size_limit 您可以使用选项在创建集群或副本集群时 手动定义 transactionSizeLimit

    • addInstance()rejoinInstance(), 自动设置值 group_replication_transaction_size_limit 以确保所有成员使用相同的值。

    • 您可以使用更改 group_replication_transaction_size_limit 正在运行的集群上 的值Cluster.setOption()

    • 您可以使用 查看选项的值 Cluster.options()

    • 如果使用 ClusterSet 从 ClusterSet 中删除 Cluster,则该选项的原始值将被恢复 removeCluster()

    • cluster.Status()检测成员值中的不一致,并使您能够使用 更正它们 Cluster.rescan()

    (漏洞#34011262)

  • dba.upgradeMetadata()无论正在升级的元数据如何,都会显示与 InnoDB Cluster 相关的消息。(漏洞#33931291)

  • 如果进程失败,调用外部进程的命令(例如 dba.deploySandboxInstance())不会在错误消息中包含外部进程的名称。从此版本开始,如果外部进程失败,其名称将包含在错误消息中。(漏洞#28543317)

  • clusterSet.status() 如果针对其中一个或多个副本集群处于脱机状态且组复制插件已从每个成员卸载的 ClusterSet 运行,则会失败并出现逻辑错误。(错误#108066,错误#34465132)

  • 如果写入负载很高,执行事务集一致性检查的 ClusterSet 命令(例如rejoinClustersetPrimaryCluster)在视图更改日志事件协调期间变得无响应。发生这种情况是因为协调包括整个事务积压,而不仅仅是视图更改日志事件。(错误#108065,错误#34462141)

  • 集群故障转移可能会在高负载下失败,因为被提升的集群在检查中与自身进行比较以确认提升的集群是最新的。此比较失败,因为应用程序正在赶上并且 GTID_EXECUTED 比较导致两个不同的值。

    截至此版本,对最新集群的检查不包括提升的集群。(错误#108064,错误#34465882)

添加或更改的功能

  • 升级检查器实用程序现在使用无效字符检查架构和表名称。(缺陷号 34460142)

  • 该关键字FULL已添加到升级检查器实用程序的关键字列表中。(缺陷号 34285219)

  • MySQL Router 定期更新 last_check_inCluster 元数据模式。在某些情况下,例如 ClusterSet 裂脑情况,这些更新可能会由于创建错误事务而无法进行重新加入操作。

    从此版本开始,元数据架构中添加了一个新的可设置选项,stats_updates_frequency. 此选项以秒为单位定义 MySQL 路由器签入更新之间的间隔。

    有关 MySQL Router 行为的更多信息,请参阅 MySQL Router 8.0.31 文档。

    该值可以使用 设置 Cluster.setRoutingOptions ,也可以使用 查看 Cluster.routingOptions([router])

    如果设置为 0(默认值),则不会进行定期更新。MySQL Router 将该值四舍五入为其 TTL 的倍数。例如:

    • 如果低于 TTL,则向上取整为 TTL。例如:如果TTL=30stats_updates_frequency=1,则有效频率为 30 秒。

    • 如果不是 TTL 的倍数,则向上取整并根据 TTL 进行调整。例如,如果 TTL=5stats_updates_frequency=11,则有效频率为 15 秒,或者如果TTL=5stats_updates_frequency=13,则有效频率为 15 秒。

    如果值为null,则选项值被清除,默认值生效。(缺陷号 34190956)

  • 对于具有大量大表的转储的并行加载,加载性能得到改进。(缺陷号 34173880)

  • 此版本中添加了以下新诊断:

    • util.debug.collectHighLoadDiagnostics(path[, options]):在目标 MySQL 服务器上运行多次诊断迭代。

    • util.debug.collectSlowQueryDiagnostics(path, query[, options]):在提供的查询持续时间内运行诊断。

    有关详细信息,请参阅 collectDiagnostics 实用程序

    作为此开发的一部分,以下辅助功能已添加到mysql模块中:

    • mysql.parseStatementAst(sql):返回编码为 JSON 结构的 AST。

    • mysql.splitScript(script): 返回包含多个语句的字符串。

    (错误#34056331,错误#34056336)

  • MySQL Shell 现在支持 MySQL Server 8.0.27 中引入的并行索引创建。以前,转储加载实用程序按顺序添加索引,一次一个。从这个版本开始,表中的所有索引都是同时添加的。

    有关限制和配置, 请参阅为在线 DDL 操作配置并行线程。(缺陷号 33976718)

  • AdminAPI 命令 dba.rebootClusterFromCompleteOutage()已重新实现以提高可用性并降低操作的复杂性和裂脑场景的可能性。

    不再允许拓扑更改。删除了以下选项:

    • removeInstances

    • rejoinInstances

    添加了以下选项:

    • force:即使无法访问集群的某些成员,或者所选的主实例具有发散或较低的 GTID_SET,也会执行该操作。

    • primary:实例定义,表示必须选作主要实例的实例。

    • dryRun:执行命令的所有验证和步骤,但实际上没有进行任何更改。

    如果在集群的主实例上启用,而在单主模式下, super_read_only将自动禁用。

    请参阅从主要中断中重新启动集群。(错误#33871079、错误#30877552、错误#26586818、错误#25487521、错误#29763863、错误#32002281、错误#28939352、错误#33389693、错误#33791275、错误#33875723)

  • 如果模式尚不存在 schema,则扩展选项 以启用模式的创建。utils.loadDump()

    此加载选项支持单个模式转储,或者如果过滤选项导致单个模式。

    笔记

    如果新架构名称与转储中的架构名称不同,转储将加载到新架构,但不会对加载的数据进行任何更改。也就是说,对旧模式名称的任何引用都保留在数据中。所有存储过程、视图等都引用原始架构,而不是新架构。

    (缺陷号 33799352)

  • MySQL Shell 现在在执行任何验证、更新或操作之前检索托管拓扑的最新视图。getCluster(), getClusterSet(), 或 getReplicaSet()现在首先被调用。这确保对 AdminAPI 对象的所有操作都针对该对象的最新版本运行。

    笔记

    dba.getCluster()选项 在connectToPrimary此版本中已弃用。如果可能,该操作现在始终连接到主要成员。如果没有,它会连接到辅助设备。

    此补丁还解决了每次执行命令时出现过多会话和元数据刷新的问题。对连接池的使用进行了一些重构。(错误#30884646,错误#33381060,错误#33415656)

  • 如果所选集群是集群集的成员,则该-- cluster选项被扩展为分配集群集变量。(缺陷 #108112,缺陷 #34485950)

  • 添加了对调用 Python 解释器的 Python 模块的支持,例如多处理。(缺陷 #99796,缺陷 #31460929)

  • MySQL Shell 的 SQL 自动完成现在是上下文感知的。它现在显示对象名称、关键字等,这些与输入的命令和命令所在的上下文相关。

    自动完成 API 通过函数shell.autoCompleteSql(statement, options)(JavaScript) 和 shell.auto_complete_sql(str statement, dict options)(Python) 向开发人员公开。

    请参阅自动完成 SQL

修正错误

  • 如果文件大小大于 4GB,则无法在 Windows 上导入转储或表。错误,stoul argument out of range已返回。(缺陷号 34479702)

  • 在某些情况下,加载表时,索引创建和分析表任务可能会在加载表之前发生。(缺陷号 34465642)

  • 在某些情况下,当处理命令行参数时,例如--cluster rescan,MySQL Shell 在初始化之前尝试写入日志文件。这导致了分段错误。从这个版本开始,命令行解析器不会尝试写入日志。(缺陷号 34460776)

  • 使用该方法访问 Shell 字典中不存在的键会 get()导致类似于以下内容的异常:

            Traceback (most recent call last):
            File "<string>", line 1, in <module>
            SystemError: 
            <built-in method get of shell.Dict object at 0x7fa458731c90>
            returned a result with an error set

    (缺陷号 34403275)

  • 在 JavaScript 模式下无法加载带有 CRLF 行结尾的文件。这影响了以下 JS 加载方法:

    • os.loadTextFile()功能

    • \source命令

    • JavaScript 插件加载

    (漏洞#34321108)

  • util.debug.collectDiagnostics()如果日志文件包含非 utf8 字符,则失败。(缺陷号 34208308)

  • 如果服务器全局变量设置为 OFF ,则不会为util.loadDump或 加载数据。util.importTableAUTOCOMMIT

    自本版本起, AUTOCOMMIT加载和导入实用程序将会话变量设置为 ON。(错误#34173126,错误#33360787)

  • MySQL Shell 将 BIT 列输出为 base10 整数而不是 HEX 字符串。从这个版本开始,BIT 列输出为 HEX 字符串。(缺陷号 34110337)

  • 如果 MySQL 5.7 实例包含一个带有默认值的 BLOB、TEXT、GEOMETRY 或 JSON 列的表,则无法加载从该实例创建的转储。

    从这个版本开始,升级检查器实用程序会扫描此类表并在找到时报告错误。(缺陷号 34063868)

  • 在某些情况下,从 MySQL 兼容的数据库导入转储会由于语法差异而导致语法错误 CREATE USER

    从这个版本开始,MySQL Shell 在转储过程中检测到无效语法,显示错误,并提供有关如何排除此类用户的信息。(缺陷号 34049624)

  • 升级检查器实用程序未检测到存储例程中的保留字。(缺陷号 33866437)

  • MySQL Shell 包含 log_syslog在沙箱实例的配置文件中。该选项在 MySQL 8.0.13 中被移除。(漏洞#29882585)

  • MySQL Shell 手册页未包含在源代码或安装包中。(缺陷号 29770787)

  • --passwords-from-stdin命令行选项 提供的密码不被接受 。(错误#108158,错误#34501568)

  • 在 MySQL Shell 源文件中发现了以下问题:

    • INSTALL有以下问题:

      • 强制依赖项列出了 Python 3.7。Python 3.8 是最低要求的版本。

      • 强制依赖项未列出所需的 libssh 版本 0.9.2。

      • 强制依赖项列出了 CMake 2.8.12。CMake 3.5.1 是最低要求的版本。

      • Linux 构建说明包含不正确的路径更改,cd bld而不是 cd mysql-shell/bld.

    • README包含 InnoDB Cluster 文档的错误链接。

    • postrm.in包含不准确的消息。

    感谢 Evgeniy Patlan 的这些贡献。(错误#107412、错误#34219276、错误#107415、错误#34219284、错误#107411、错误#34219274、错误#107413、错误#34219279、错误#107416、错误#34219285、错误#1074141928)2

  • error_count如果 MySQL Shell 自定义提示使用查询变量,受最后执行语句影响的 会话变量(例如 ) 意外更改。(错误#104955,错误#33362817)