Documentation Home
MySQL Shell 8.0 发行说明  /  MySQL Shell 8.0.28 的变化(2022-01-18,全面上市)

MySQL Shell 8.0.28 的变化(2022-01-18,全面上市)

弃用和移除说明

  • 从 8.0.28 版开始,对 TLSv1 和 TLSv1.1 连接协议的支持已从 MySQL 服务器中删除。这些协议已从 MySQL 8.0.26 中弃用。有关背景信息,请参阅 IETF 备忘录 Deprecating TLSv1.0 and TLSv1.1。使用更安全的 TLSv1.2 和 TLSv1.3 协议在 MySQL Shell 和 MySQL Server 之间建立连接。TLSv1.3 要求 MySQL 服务器和客户端应用程序都使用 OpenSSL 1.1.1 或更高版本进行编译。

    如果您尝试使用 TLS/SSL 从任何版本的 MySQL Shell 连接到 8.0.28 或更高版本的 MySQL 服务器实例,并且您使用该 --tls-version选项指定 TLSv1 或 TLSv1.1 协议,您将看到以下结果:

    • 对于 TCP 连接,连接失败,并向 MySQL Shell 返回错误。

    • 对于套接字连接,如果--ssl-mode设置为REQUIRED,则连接失败。如果 --ssl-mode未设置为 REQUIRED,则建立连接但禁用 TLS/SSL。

修复了 AdminAPI 错误

  • 在 MySQL Shell 8.0.22 中回归后,如果一个实例是 InnoDB Cluster 的一部分并从中删除,然后添加到不同的 InnoDB Cluster,则第一个 InnoDB Cluster 的现有元数据架构不会在此过程中清除。MySQL Shell 现在会在实例上删除并重新创建集群元数据架构,以确保它与新集群的架构完全对应。(缺陷号 33574005)

  • 由于元数据查询中的错误,MySQL Shell 8.0.27 无法用于创建或管理运行 MySQL Server 8.0.25 的 InnoDB 集群。该查询正在验证下一个版本中引入的设置。要解决此问题,请在将 MySQL Shell 8.0.27 与集群一起使用之前,将 InnoDB 集群成员实例上的 MySQL Server 升级到 8.0.26 或 8.0.27 版本。此问题已在 MySQL Shell 8.0.28 中修复。(错误#33532056,错误#33580945)

  • 当用于将实例添加到 InnoDB 集群的恢复方法是从现有成员服务器的二进制日志(增量恢复)进行增量状态传输时,AdminAPI 从集群成员中卸载了克隆插件,这可能会导致后续的自动重新加入过程失败。卸载不再发生。(缺陷号 33492812)

  • AdminAPI 的cluster.addInstance()cluster.rejoinInstance()dba.rebootClusterFromCompleteOutage() 命令不检查offline_mode 系统变量,因此如果启用了该变量,则会发生连接和复制错误。这些操作现在检查系统变量的值并在必要时禁用它。(缺陷号 33396423)

  • groupSeeds选项现在已弃用 InnoDB Cluster 创建命令,并且不支持 InnoDB ClusterSet 创建命令,并且没有记录。InnoDB Cluster 对 Group Replication 组种子成员列表( group_replication_group_seeds系统变量)的处理已修改为在添加、删除或重新加入实例时更新列表,并检查集群元数据中的列表而不是在单个成员服务器上实例。(错误#33389693,错误#33573834)

  • 对于在重负载下运行的 InnoDB ClusterSet 部署,副本集群的状态可能会间歇性地报告为OK_NOT_CONSISTENT,这意味着副本集群上的事务集(GTID 集)比主集群上的事务集多。gtid_executed发生这种情况是因为事务在添加到主集群的GTID 集之前被发送到副本集群 。已收到但尚未应用的事务现在gtid_executed会在与主集群进行比较之前从副本集群的 GTID 集中减去。检索到的交易集显示在 clusterSet.status() 命令。如果 ClusterSet 复制通道被重置或更改其源,则接收到的事务集将被重置,因此可能会报告不一致,直到主节点外部化了重置前发生的所有事务。(缺陷号 33330871)

  • 如果使用该 dba.rebootClusterFromCompleteOutage() 命令在中断后重新启动 InnoDB Cluster,然后使用该命令重新加入 InnoDB ClusterSet ,如果在命令上使用了or 选项 clusterSet.rejoinCluster(),则重新加入失败 。如果 InnoDB Cluster 是 InnoDB ClusterSet 的一部分并且已失效,则现在无法使用这些选项。(缺陷号 33301229)rejoinInstancesremoveInstancesdba.rebootClusterFromCompleteOutage()

  • InnoDB ClusterSet的 clusterSet.removeCluster() 命令现在在从 ClusterSet 中删除时隐式解散 InnoDB Cluster,以便所有成员成为独立实例。这使得实例可以在同一个或另一个 ClusterSet 中的新集群中重用,而没有任何冲突的元数据。(缺陷号 33267834)

添加或更改的功能

  • 当您使用 MySQL Shell 8.0.28 及更高版本创建 InnoDB Cluster、InnoDB ClusterSet 或 InnoDB ReplicaSet 时,如果您有安全要求,即 AdminAPI 自动创建的所有帐户都有严格的身份验证要求,您可以为 replicationAllowedHost配置选项设置一个值。该replicationAllowedHost选项意味着所有自动创建的帐户只能从允许的主机连接,使用严格的基于子网的过滤。

    您可以使用setOption选项 replicationAllowedHost在现有的 InnoDB Cluster、InnoDB ClusterSet 或 InnoDB ReplicaSet 上设置配置。

  • MySQL 8.0.28 及更高版本包括连接超时 MySQL Shell 选项,以允许用户使用 AdminAPI 和非 AdminAPI 连接为会话设置超时。

    当一个或多个服务器确实无法访问时,某些打开许多服务器连接的操作可能需要很长时间才能执行,例如cluster.status() 命令。连接超时可能无法为响应提供足够的时间。

    从 MySQL Shell 8.0.28 开始,您可以使用 MySQL Shell 配置选项connectTimeout为任何不使用 AdminAPI 的会话设置连接超时(以秒为单位)。

    从 MySQL Shell 8.0.28 开始,您可以使用 MySQL Shell 配置选项dba.connectTimeout为使用 AdminAPI 的任何会话设置连接超时(以秒为单位)。

  • 从 MySQL Shell 8.0.28 开始,可以使用三种防护操作:

    • Cluster.fenceWrites():停止向 ClusterSet 的主集群写入流量。副本集群不接受写入,所以这个操作对它们没有影响。

    • Cluster.unfenceWrites():恢复写入流量。此操作可以在先前使用该cluster.fenceWrites操作隔离写入流量的集群上运行。

    • Cluster.fenceAllTraffic():隔离所有流量的集群。如果您使用 隔离了集群的所有流量 ,则必须使用 MySQL Shell 命令 Cluster.fenceAllTraffic()重新启动集群 。dba.rebootClusterFromCompleteOutage()

    即使您主要在属于集群集的集群上使用防护,也可以使用 Cluster.fenceAllTraffic().

  • MySQL Shell 现在支持 SSH 隧道连接到 MySQL 服务器实例。SSH 隧道一旦建立,就可以在从同一远程服务器实例连接的同一用户到同一主机的连接之间共享。MySQL Shell 的 Secret Store 可以存储用于连接到 SSH 服务器和身份文件的密码和密码,以便在以后的连接中自动检索。一个新shell.listSshConnections()函数返回活动 SSH 隧道的列表。您可以使用 MySQL Shell 配置选项配置数据传输的缓冲区大小ssh.bufferSize

    您可以在标准 SSH 配置文件 ( ~/.ssh/config) 或由 MySQL Shell 配置选项命名的自定义配置文件中指定 SSH 连接详细信息ssh.configFile。您可以使用连接选项覆盖设置的默认值 ssh-config-file。身份文件可以是 SSH 配置文件夹 ( ) 中的标准私钥文件,也可以是~/.ssh/id_rsa连接选项命名的密钥文件ssh-identity-file。您可以使用--sshMySQL Shell \connect命令或命令行上的选项来提供连接 SSH 服务器的 URI,也可以使用该shell.connect()方法并将连接数据指定为键值对。

    不支持在使​​用 SSH 隧道建立的连接上使用 AdminAPI 命令,部署、启动、停止、终止和删除沙箱实例的命令除外。

  • MySQL 8.0.27 及更高版本包括对多因素身份验证的支持。此功能包括最多需要三个身份验证值(2FA 和 3FA)的 MFA 形式。系统 authentication_policy变量定义帐户可能具有(或需要具有)多少个身份验证因素以及可用于每个因素的身份验证方法。为了使用需要多个密码的帐户对 MySQL 服务器进行身份验证,MySQL Shell 现在支持命令行连接的--password1--password2--password3选项,最多允许指定三个密码。现有--password选项和 --password1选项被视为等效。您可以在命令行上的选项后面指定一个密码值(这是不安全的),或者如果在没有密码值的情况下给出选项,MySQL Shell 会依次提示用户输入每个密码。这些选项仅支持使用命令行参数建立的经典 MySQL 协议连接。

  • MySQL Shell 的实例转储实用程序 util.dumpInstance()、模式转储实用程序 util.dumpSchemas()、表转储实用程序 util.dumpTables()和转储加载实用程序 util.loadDump()具有新的过滤选项,以涵盖所有可以转储和加载的对象。这些选项使您可以很好地控制转储文件的内容以及将哪些对象加载到目标服务器上,并使您能够跳过导致问题的任何对象。在实用程序的适当级别,这些选项允许您包括或排除指定的模式、表、例程、事件或触发器列表。

修正错误

  • MySQL Shell 8.0.28 不支持以下 Linux 发行版:

    • SUSE Linux 企业服务器 12 (SLES12)

    • 企业 Linux 6 (EL6)

    (缺陷号 33787657)

  • MySQL Shell 的实例转储实用程序 util.dumpInstance()、模式转储实用程序 util.dumpSchemas()和表转储实用程序 util.dumpTables()无法与使用该 --skip-grant-tables选项启动的 MySQL 服务器实例一起使用,这意味着这些实用程序无法在这种紧急情况下用于提取数据。这些实用程序现在检测用于这种情况下所有连接的特殊帐户,并假定该帐户具有所有可用权限。该users选项也会自动设置为false,因为在这种情况下无法收集某些授权信息。(缺陷号 33592520)

  • 从清单文件加载转储时,如果文件中的 PAR 已过期,MySQL Shell 的转储加载实用程序 util.loadDump()将失败并显示一条不清楚的消息。该实用程序现在比较 PAR 的当前时间和到期时间,如果它们已到期,则返回适当的消息并停止加载过程。(缺陷号 33508311)

  • 与 PAR(预验证请求)相关的 MySQL Shell 代码中使用了硬编码域名,如果在 PAR 中使用了 oraclecloud.com 以外的域名,则会导致错误。该问题现已得到纠正,并且允许使用任何域名。(缺陷号 33506737)

  • 如果实例没有模式或过滤导致模式集为空,则MySQL Shell 的实例转储实用程序会 util.dumpInstance()停止转储并显示错误,因此无法仅从实例中转储用户。users如果选项设置为 (默认值),操作现在在这种情况下会成功,如果选项设置 为true,则继续停止并出现错误。(缺陷号 33502098)usersfalse

  • 在 Windows 上,当 MySQL Shell 由另一个应用程序启动时,即使收到有效答案,也会无限期地重复提示是或否答案(例如是否将提供的密码存储在凭据管理器中)。这是由于\r除换行符 ( ) 外,回车符 ( ) 未被修剪\n。该问题现已解决。(缺陷号 33499602)

  • 当该--json=raw选项用于从 MySQL Shell 的输出生成原始 JSON 时,不包括换行符,从而导致未格式化的文本。(缺陷号 33486098)

  • 在 Windows 上,回归意味着 MySQL Shell 无法使用类似 URI 的连接字符串连接到服务器,该连接字符串指定了默认架构但未指定架构元素(例如mysqlx://)。(缺陷号 33485693)

  • 对于使用 MySQL Shell 注册的扩展对象,如果找到多个主题,帮助查找功能现在会搜索与搜索字符串完全匹配的内容。以前仅在本地上下文中加载的插件帮助现在根据插件的加载位置在全局或本地上下文中加载。(缺陷号 33468265)

  • 对于在 MySQL Shell 中注册为更高级别扩展对象成员的扩展对象,Python 装饰器在查找对象层次结构时没有考虑命名约定,但注册函数考虑了,这可能会导致不正确的结果。注册函数现在使用 MySQL Shell 的算法转换对象名称,以便正确找到对象。(缺陷号 33462107)

  • 由于 API 更改,无法使用 Python 3.10 从源代码构建 MySQL Shell。该问题现已得到纠正。(缺陷号 33454039)

  • 对于使用 MySQL Shell 注册的扩展对象,帮助查找不区分同名对象,其中只有一个作为全局对象可用,另一个是附属对象。帮助注册和帮助查找功能现已更新,以匹配对象的完全限定 ID,并优先考虑完全限定 ID 与搜索字符串完全匹配的任何帮助项。(缺陷号 33451028)

  • MySQL Shell 的转储加载实用程序 util.loadDump()可以将二级索引的创建推迟到表数据加载之后,可以 deferTableIndexes选择。以前,无法在定义了辅助引擎的表上创建延迟索引,因为无法在这些表上执行 DDL 语句。如果索引被延迟,该实用程序现在会从表中删除 SECONDARY_ENGINE 子句,并在创建索引后将其重新添加。(缺陷号 33414321)

  • MySQL Shell 的实例转储实用程序 util.dumpInstance()、模式转储实用程序 util.dumpSchemas()和表转储实用程序 util.dumpTables()现在使用算术运算将具有数据类型 DECIMAL 的索引列的表分块,从而提高了执行速度。(缺陷号 33400387)

  • MySQL Shell 的实例转储实用程序 util.dumpInstance()、模式转储实用程序 util.dumpSchemas()和表转储实用程序 util.dumpTables()现在打印转储模式、表、视图、事件、例程、触发器和用户的数量的摘要,以及数据库中可用的这些对象的数量. (缺陷号 33396153)

  • 如果无法写入$HOME环境变量指定的目录,则 MySQL Shell 会停止。如果是这种情况,MySQL Shell 启动时现在会返回错误。(缺陷号 33390034)

  • 当使用MySQL Shell的\source命令执行脚本文件时,如果脚本不包含完整的语句,MySQL Shell进入多行模式而不是执行脚本并返回相应的错误。MySQL Shell 的流处理现在禁用多行处理以强制执行缓存的代码,即使它不完整,也会返回错误。(缺陷号 33337598)

  • 当 MySQL Shell 的转储加载实用程序 util.loadDump()用于加载当前正在进行的转储时,该实用程序的进度报告不准确。(缺陷号 33332497)

  • 当 MySQL Shell 的转储加载实用程序 util.loadDump()用于使用前缀 PAR 加载当前正在进行的转储时,会报告转储索引文件的错误。(缺陷号 33332080)

  • --uriMySQL Shell 屏蔽了由命令行选项 指定的类似 URI 的字符串中的用户名后提供的密码 。如果字符串中的用户名是百分比编码的并且提供了密码,则无法正确地与普通用户名进行比较,并且连接失败。MySQL Shell 现在从类似 URI 的字符串中删除密码,只留下用户名,然后再进行比较。(错误#33273652,错误#104714)

  • 可以使用 Python 的下标运算符访问 MySQL Shell 的内置全局对象,例如 dba["help"](). 但是,如果将无效类型用作下标,则会返回未指定的错误。 TypeError现在在这种情况下返回。(缺陷号 32315014)