Documentation Home
MySQL Shell 8.0 发行说明  /  MySQL Shell 8.0.29 的变化(2022-04-26,全面上市)

MySQL Shell 8.0.29 的变化(2022-04-26,全面上市)

修复了 AdminAPI 错误

  • 如果 MySQL Router 作为 InnoDB Cluster 升级过程的一部分升级,则dba.upgradeMetadata() 命令继续报告 MySQL Router 在第一次尝试时已过时。这是因为该命令为 MySQL Router 帐户提供了所需的访问权限,但 MySQL Router 需要元数据缓存重新加载 (TTL) 来实现这一点并更新元数据信息。当 TTL 发生时,重试命令一次或多次将起作用,默认情况下每 0.5 秒发生一次。该命令现在尝试在将结果返回给用户之前最多两秒钟检索 MySQL Router 的元数据信息,并添加注释以解释高 TTL 是 MySQL Router 被报告为过时的可能原因。(缺陷号 33914146)

  • Cluster.rebootClusterFromCompleteOutage() 命令未实施 group_replication_view_change_uuid由命令生成和设置的已 更改设置Cluster.rescan() 。该操作现在检查是否 group_replication_view_change_uuid已保留新值并在重新启动集群时使用它。(缺陷号 33850528)

  • 对于 8.0.27 及更高版本的 MySQL Server 实例,对于作为 InnoDB ClusterSet 一部分的 InnoDB Cluster, group_replication_view_change_uuid系统变量是必需的,并且必须在集群中的所有成员服务器上设置为相同的值。以前, Cluster.rescan() 如果找不到或不匹配,该命令会为集群成员实例上的系统变量生成并设置一个值。在此之后,需要完全重启 InnoDB Cluster 才能实施更改,AdminAPI 通知了管理员但没有自动执行。如果未执行重新启动,则挂起的成员 group_replication_view_change_uuid如果重新启动,校正随后无法使用 Group Replication 的自动重新加入功能重新加入该组。

    现在,该 Cluster.rescan() 命令默认不会自动设置系统变量值。管理员可以指定新 Cluster.rescan() 选项updateViewChangeUuid来生成和设置系统变量的值,方式与以前的行为相同。如果未指定新选项,则该命令不会更改系统变量,只会向管理员发出警告,告知必须设置系统变量值并且必须重新启动集群。(缺陷号 33748812)

  • AdminAPI 的 命令会覆盖选举过程并强制底层组复制组中的特定服务器实例成为新的主要服务器实例。它使用 函数。以前,该函数等待现有主节点上的所有活动事务结束,包括使用该函数后的传入事务,然后才将当前主节点设置为只读并更改为新的主节点。等待时间没有上限。从 MySQL Shell 8.0.29 开始,您可以使用新的Cluster.setPrimaryInstance(instance)group_replication_set_as_primaryrunningTransactionsTimeout为使用该函数时正在运行的事务添加 0 到 3600 秒之间的超时的选项。当您设置超时时,发出命令后传入的事务将被拒绝。(缺陷号 33538559)

  • 如果服务器实例(report_hostreport_port)在实例加入 InnoDB Cluster 后更改了主机名和端口,则集群元数据不会相应更改,从而导致将实例设置为主实例等操作出现问题。该 Cluster.status() 命令现在将任何不匹配报告为实例错误,并且该 Cluster.rescan() 命令现在会检测这些项目是否已更改并自动更新元数据以匹配从实例中获取的值。(缺陷号 33016337)

  • 当该 Cluster.addInstance 操作用于将服务器实例添加到 InnoDB 集群时,MySQL Shell 会检查服务器上没有主键的表,如果存在,则操作失败。如果用户选择 MySQL Clone 作为供应方法,无论如何都会清除服务器上的所有数据,尽管没有必要,但仍会执行该检查。当为操作指定克隆时,现在将忽略该检查 Cluster.addInstance 。(缺陷号 32992693)

  • dba.configureInstance()函数预先检查 InnoDB Cluster 使用情况的实例配置,未log_bin正确处理 MySQL 5.7 实例的系统变量,其行为与 MySQL 8.0 实例不同。系统变量的处理和输出log_bin现已更正。(缺陷号 31964706)

  • MySQL Shell 的 Cluster.setPrimaryInstance() 命令使用对服务器函数的调用来指定成为新主服务器的实例。但是,如果服务器函数返回错误,例如指定的服务器实例由于其 MySQL Server 版本高于组中的其他服务器而无法充当主实例,则 MySQL Shell 不会检查错误并报告操作作为成功。MySQL Shell 现在检查服务器函数返回的错误并将它们显示给用户。(缺陷号 31775698)

  • 当命令的adoptFromGR选项 dba.createCluster设置为 false时,行为与省略选项时相同,提供确认提示,如果用户确认则操作继续。adoptFromGR: false如果实例属于 Group Replication 组,则指定 now 会阻止创建集群,而不会向用户显示提示。(缺陷号 30548447)

  • AdminAPI 对组成员 ( group_replication_member_expel_timeout) 的驱逐超时值的验证,可以在创建集群时使用该expelTimeout 选项进行设置,已更正以考虑自 MySQL 8.0.13 中引入该选项以来对默认值和最大值的更改,并且使支票发布具体化。(漏洞#29337169)

  • 如果使用 MySQL Clone 将实例添加到 InnoDB Cluster,并使用Ctrl+CwaitRecovery: 0选项让恢复在后台进行,则使用来自捐赠者实例的恢复帐户,而不是为新实例创建的恢复帐户. 如果后来使用 Cluster.removeInstance 命令删除了新实例,则不会删除为其创建的恢复帐户,因为 AdminAPI 仅检查实例上实际使用的恢复帐户(捐赠者帐户)。帐户删除逻辑现在考虑为实例创建的帐户并清除它,即使它未被使用。(错误#105776,错误#33630808)

  • 如果 MySQL Router 被引导使用 Unix 套接字或禁用 TCP 端口,AdminAPI 不会正确处理生成的端点值,导致在与 MySQL Router 管理相关的 AdminAPI 操作期间出错,例如 Cluster.listRouters(). 该问题现已解决。(错误#105649,错误#33602309)

添加或更改的功能

  • MySQL Shell 的新诊断实用程序 util.debug.collectDiagnostics使您能够从连接的 MySQL 服务器收集诊断信息,生成 TSV 和 YAML 格式的报告,并将它们呈现在您选择的位置的 zip 存档中。

    此实用程序使您能够从独立服务器、复制拓扑成员、MySQL 数据库服务数据库系统等检索诊断信息。

    检索到的信息包括 and 的内容、 performance_schema.error_log全局 processlist变量和持久变量列表、复制组信息以及没有主键的表列表。

    请参阅collectDiagnostics 实用程序

  • MySQL Shell 现在支持 --fido-register-factor连接选项来注册 FIDO 设备以对服务器进行身份验证。您以与mysql客户端程序相同的方式将选项与mysqlsh一起使用,MySQL Shell 传递由 MySQL 客户端库或客户端身份验证插件引发的任何错误。

  • 如果发生故障,MySQL Shell 的实例转储实用程序 util.dumpInstance()、模式转储实用程序 util.dumpSchemas()、表转储实用程序 util.dumpTables()和转储加载实用程序 util.loadDump()现在报告可识别错误的错误代码和用户友好消息。这些消息提供有关流程中发生错误的阶段的上下文,以及涉及的对象的名称。转储操作的错误码在52000-52999范围内,加载操作的错误码在53000-53999范围内。任何实用程序可能遇到的连接和网络错误的错误代码都在 54000-54999 范围内,并且错误代码与涉及的 HTTP 错误相匹配。例如,当找不到 URL 的目标时,会出现错误 54404。

  • MySQL 外壳的shell.prompt()函数是 MySQL Shell API 的一部分,使开发人员能够为外部应用程序创建脚本,以通过 MySQL Shell 与用户交互以收集数据。该函数有新的选项来支持除了纯字符串值和密码提示之外的其他提示类型,包括:带有预定义答案的问题,从选项列表中选择,目录路径,要保存的新文件的文件路径,以及要打开的现有文件的文件路径。您还可以提供标题,MySQL Shell 不会向用户显示但应用程序可以使用它来识别提示,以及提示的描述,MySQL Shell 在提示消息之前作为单独的段落显示给用户。

修正错误

  • 从 Debian 或 Ubuntu 平台卸载 MySQL Shell 时,会留下一些文件和目录。卸载程序现在清除这些。(缺陷号 33934625)

  • MySQL Shell 有一个新的 API 函数 Column.getFlags(),使启用的列标志列表可用于脚本接口。X 协议和经典 MySQL 协议之间对列标志的报告进行了标准化。(缺陷号 33916064)

  • MySQL Shell 处理二进制数据的一些问题已得到纠正。BINARY、VARBINARY 和 BLOB 数据类型现在正确报告为字节,TEXT、CHAR 和 VARCHAR 数据类型报告为字符串。对于打印结果,二进制列使用 Base64 编码用于 JSON 输出格式,并作为十六进制字符串用于其他输出格式。在脚本层,对于Python,二进制数据表示为二进制字符串,对于JavaScript,则使用ArrayBuffers;可以使用这些格式中的任何一种将二进制数据插入到数据库中。(错误#33891697、错误#32789317、错误#32108582)

  • 当 MySQL Shell 的实例转储实用程序 util.dumpInstance()、模式转储实用程序 util.dumpSchemas()和表转储实用程序 util.dumpTables()将不可见的主键列添加到具有compatibility 选项create_invisible_pks修改的表时,它现在被添加为第一列而不是最后一列。(缺陷号 33880935)

  • util.importJSON()使用选项convertBsonTypes: true或 时 ,MySQL Shell 的 JSON 导入实用程序的吞吐量 大大降低convertBsonOid: true。减速的原因(一种 JSON 文档解析器方法)现已修复。(缺陷号 33799202)

  • 为了容忍最近和将来对保留关键字列表的更改,MySQL Shell 的实例转储实用程序 util.dumpInstance()、模式转储实用程序 util.dumpSchemas()、表转储实用程序 util.dumpTables()和转储加载实用程序 util.loadDump()现在引用所有标识符。(缺陷号 33744583)

  • MySQL Shell 的实例转储实用程序 util.dumpInstance()、模式转储实用程序 util.dumpSchemas()和表转储实用程序 util.dumpTables()以及转储加载实用程序 util.loadDump()不能由用户名中包含 @(at 符号)字符的用户帐户使用。AdminAPI 命令也可能会出现此问题,例如 dba.checkInstanceConfiguration检索有关当前活动用户帐户的信息。当 MySQL 的 CURRENT_USER() 函数返回帐户详细信息时,MySQL Shell 现在允许在用户名中使用 @(at 符号)字符。(缺陷号 33743612)

  • BACKUP_ADMIN不再需要特权来执行 MySQL 服务器实例的一致转储(使用 选项consistent)。MySQL Shell 的实例转储实用程序util.dumpInstance()、模式转储实用程序util.dumpSchemas()和表转储实用程序util.dumpTables()现在执行一致性检查。如果用户帐户没有BACKUP_ADMIN权限且LOCK INSTANCE FOR BACKUP无法执行,则实用程序会在转储期间进行额外的一致性检查。如果此检查失败,实例转储将停止,但模式转储或表转储将继续并返回一条错误消息以提醒用户一致性检查失败。(错误#33699844,错误#33697289)

  • 设置 SSH 隧道时,MySQL Shell 现在会从已批准的 SSH 算法和参数列表中进行选择,其中不包括不符合可接受的安全标准的算法和参数。(缺陷号 33670923)

  • util.loadDump()如果两个或多个线程从 OCI 对象存储桶加载数据(使用osBucketName选项和本地 OCI 配置文件)执行触发标头缓存清理操作的操作,则 MySQL Shell 的转储加载实用程序 可能会意外停止。缓存清理类不再在线程之间共享。(缺陷号 33654278)

  • 从 MySQL Shell 8.0.27 开始,实例转储实用程序 util.dumpInstance()、模式转储实用程序 util.dumpSchemas()和表转储实用程序 util.dumpTables()在尝试转储 NDB 表时返回错误。这是因为该实用程序的分区感知功能使用了对支持自动分区的存储引擎禁用的操作。现在对使用 NDB 存储引擎的表禁用分区感知。(缺陷号 33643395)

  • MySQL Shell 的插件管理器现在验证 MySQL Shell 版本并在当前版本无法安装插件时返回错误。官方 MySQL Shell 插件存储库 ( https://cdn.mysql.com/mysql_shell/plugins_manifest.zip ) 的 URL 也已更新。(缺陷号 33642210)

  • 当加载在 ANSI_QUOTES SQL 模式生效时创建的例程时, MySQL Shell 的转储加载实用程序 util.loadDump()可能会失败并出现错误 标识符中的无效字符” 。这是由于对用双引号引起来的标识符处理不当造成的。该问题以及转储实用程序中的一个问题现已得到解决,即触发器中的标识符在需要时未被引用。(缺陷号 33640887)

  • MySQL Shell 的转储加载实用程序 util.loadDump()现在确保当 deferTableIndexes使用该选项将二级索引的创建推迟到表加载之后时,首先添加全文索引。添加第一个全文索引会重建表,因此首先执行此操作可确保不需要重新创建其他索引。(缺陷号 33624751)

  • 在 MySQL Shell 8.0.28 中进行回归后,MySQL 返回的零日期导致 Python 模式出现异常。该问题与许多其他日期和时间值处理问题一起得到修复。(缺陷号 33621406)

  • 的联机帮助autorejointries将默认值列为 0。这在 MySQL Shell 8.0.20 之前是正确的。自 MySQL Shell 8.0.21 以来的默认值为 3。(错误号 31356257)