Documentation Home
MySQL Shell 8.0 发行说明  /  MySQL Shell 8.0.18 的变化(2019-10-14,全面上市)

MySQL Shell 8.0.18 的变化(2019-10-14,全面上市)

AdminAPI 添加或更改的功能

  • MySQL Shell 现在可以选择记录由 AdminAPI 操作执行的 SQL 语句,如果--verbose设置了该选项,则将它们输出到控制台。dba.logSqlMySQL Shell 配置选项或命令行选项激活这些语句的 --dba-log-sql日志记录。沙箱操作执行的语句被排除在外。查看语句可以让您从 SQL 执行的角度观察 AdminAPI 操作的进度,这有助于对任何错误进行问题诊断。

  • 如果目标 MySQL 服务器版本高于 8.0.13,AdminAPI 现在支持 IPv6 地址。使用 MySQL Shell 8.0.18 或更高版本时,如果所有集群实例都运行 8.0.14 或更高版本,那么您可以使用 IPv6 或解析为实例连接字符串的 IPv6 地址的主机名,并使用localAddress, groupSeeds和 等选项ipWhitelist。有关使用 IPv6 的详细信息,请参阅支持 IPv6 以及混合 IPv6 和 IPv4 组

    参考资料:另请参阅:Bug #29557250、Bug #30111022、Bug #28982989。

  • 您现在可以重置 InnoDB Cluster 创建的内部恢复帐户的密码,例如遵循自定义密码生命周期策略。使用该 Cluster.resetRecoveryAccountsPassword() 操作重置集群使用的所有内部恢复帐户的密码。该操作为每个在线实例的内部恢复帐户设置一个新的随机密码。如果无法访问实例,则操作失败。您可以使用该force选项忽略此类实例,但不建议这样做,在使用此操作之前让实例重新联机会更安全。该操作仅适用于InnoDB集群创建的密码,不能用于更新手动创建的密码。

    笔记

    执行此操作的用户必须具有所有必需的clusterAdmin权限,特别是CREATE USER,以确保无论是否需要密码验证策略,都可以更改恢复帐户的密码。换句话说,与 password_require_current 系统变量是否启用无关。

  • MySQL Shell 现在支持为经典 MySQL 协议连接指定 TLS 版本 1.3 和 TLS 密码套件。您可以使用:

    • 指定 TLS 版本 1.3的--tls-version命令选项。

    • 指定密码套件的--tls-ciphersuites 命令选项。

    • thetls-versionstls-ciphersuites连接参数作为 URI 类型连接字符串的一部分。

    笔记

    tls-versions(复数)没有等效的键值,它仅在 URI 类型的连接字符串中受支持。用于tls-version在键值连接字符串中指定 TLSv1.3。

    要使用 TLS 1.3 版,MySQL Shell 和 MySQL 服务器都必须使用 OpenSSL 1.1.1 或更高版本进行编译。有关详细信息,请参阅使用加密连接

修复了 AdminAPI 错误

  • Cluster.rejoinInstance() 操作未设置为 InnoDB Cluster 定义的自动增量值,如果实例配置未正确持久化(例如在 5.7 服务器上),将导致使用默认组复制行为。此修复可确保 Cluster.rejoinInstance() 操作更新目标实例的自动增量设置。(缺陷号 30174191)

  • now的输出 Cluster.status() 包括该replicationLag字段。该值以 HH:MM:SS 格式显示,显示最后一个事务提交时间戳和最后一个事务应用时间戳之间的时间差。这使您能够监控最近提交的事务与应用于实例之间的时间量。(缺陷号 30003034)

  • Cluster.addInstance() 没有确保 MySQL Clone 插件在可用且未禁用时安装或加载到所有集群实例上。这意味着无论何时使用较旧的 MySQL Shell 版本创建集群,在支持克隆的目标 MySQL 实例上,该实例都不会安装克隆插件。结果是任何 Cluster.addInstance() 使用克隆的调用将失败。如果使用增量恢复类型将实例添加到由一个实例组成的集群,然后删除种子实例,则会发生同样的问题。这导致所有集群实例都没有安装克隆插件,因此使用克隆恢复方法添加的任何实例都会失败。该修复程序确保克隆插件在集群创建时安装在所有集群成员上(如果可用且未禁用),并且在将实例添加到集群时也是如此。(漏洞#29954085)

  • Cluster.rejoinInstance() 操作未检查重新加入集群的实例的 GTID 一致性,这可能导致数据分歧。现在,作为操作的一部分进行的 GTID 一致性检查 Cluster.rejoinInstance() 已经得到改进,以检查不可恢复或分歧的数据集以及空的 GTID 集。如果发现实例与集群不一致,则不会重新加入,并且操作会失败并出现描述性错误。您还会看到错误交易、可能的结果和解决方案的列表。(漏洞#29953812)

  • Cluster.describe() 正在直接从当前会话中检索有关集群拓扑和实例上安装的 MySQL 版本的信息。现在,信息是从 Metadata schema 中检索出来的,并且 MySQL 版本不包含在输出的信息中 Cluster.describe()。(漏洞#29648806)

  • 使用包含导致 dba.deploySandbox()失败的 ' 字符的密码。现在,所有敏感数据都已正确包装以避免此类问题。(漏洞#29637581)

  • Cluster.addInstance() 操作创建组复制恢复过程所需的内部恢复用户。如果 Cluster.addInstance() 操作失败,例如因为无法启动组复制,则不会删除创建的恢复用户。现在,如果发生故障,所有内部用户都会被删除。(漏洞 #25503159)

  • 当一个集群丢失仲裁并且除主实例之外的大多数集群实例都处于脱机状态时,在重新建立仲裁并将新实例添加到集群后,无法删除先前的主实例并将其添加到集群。这是因为尝试联系离线实例时操作失败,这是因为验证是否需要升级 Group Replication 协议的功能没有考虑某些集群实例离线(不可达)的可能性。该修复改进了 Group Replication 协议升级处理 Cluster.removeInstance() 操作,现在尝试连接到其他集群实例并为此目的使用第一个可访问的实例。(缺陷号 25267603)

  • dba.configureInstance()操作没有binlog_checksum 在选项文件中使用所需值(无)设置选项,以供不支持SET PERSIST 的实例(例如,运行MySQL 5.7的实例),当未提供选项文件路径作为输入参数而不是指定的是指定的。交互模式下的操作向导。(缺陷 #96489,缺陷 #30171090)

添加或更改的功能

  • MySQL Shell 的升级检查器实用程序( util.checkForServerUpgrade()操作)包括以下新的和扩展的检查:

    • 该实用程序现在检查包含字符串FTS的表空间名称,这些名称可能会被错误地识别为全文索引表的表空间,从而阻止升级。该问题已在 MySQL 8.0.18 中修复,但会影响到更早的 MySQL 8.0 版本的升级。

    • 对名称与保留关键字冲突的数据库对象的检查现在涵盖了附加关键字 ARRAYMEMBERLATERAL

    • - 过时 sql_mode标志的检查现在检查全局sql_mode 设置。

    运行升级检查器实用程序不再更改 gtid_executed值,这意味着该实用程序可用于组复制组成员,而不会影响他们与组的同步。升级检查器现在也可以在 ANSI_QUOTESSQL 模式下正常工作。(错误#30002732、错误#30103683、错误#96351、错误#30103640、错误#96350)

    参考资料:另请参阅:Bug #29992589。

  • MySQL Shell 有两个新的内置报告,它们提供从各种来源获取的信息,包括 MySQL 的性能模式:

    • threads列出连接的 MySQL 服务器中的当前线程,这些线程属于用于运行报告的用户帐户。使用特定于报告的选项,您可以选择显示前台线程、后台线程或所有线程。您可以为每个线程报告一组默认信息,或从大量可用选项中选择要包含在报告中的特定信息。您可以过滤、排序和限制输出。

    • thread提供有关连接的 MySQL 服务器中特定线程的详细信息。默认情况下,报告显示有关当前连接使用的线程的信息,或者您可以通过线程 ID 或连接 ID 来识别线程。您可以选择一个或多个类别的信息,或查看有关线程的所有可用信息。

    \show您可以使用 MySQL Shell和\watch命令 运行新报告 。这些报告适用于运行所有受支持的 MySQL 5.7 和 MySQL 8.0 版本的服务器。如果任何信息项在目标服务器的 MySQL 服务器版本中不可用,则报告将其排除。

  • MySQL Shell 有两个新的控制命令:

    • ( \edit)\e命令在默认系统编辑器中打开一个命令进行编辑。如果您为命令指定参数,则此文本将放置在编辑器中,如果您不指定,则 MySQL Shell 历史记录中的最后一条命令将放置在编辑器中。完成编辑后,MySQL Shell 会显示已编辑的文本,供您执行或取消。也可以使用缩写形式\e或组合键Ctrl-X Ctrl-E调用该命令。

    • ( \system)\!命令运行您指定为命令参数的操作系统命令,然后在 MySQL Shell 中显示命令的输出。如果无法执行命令,MySQL Shell 将返回错误。

  • MySQL Shell 现在使用 Python 3。对于包含系统支持的 Python 3 安装的平台,MySQL Shell 使用最新的可用版本,最低支持版本为 Python 3.4.3。对于不包含 Python 3 的平台,MySQL Shell 捆绑了 Python 3.7.4。MySQL Shell 保持与 Python 2.6 和 Python 2.7 的代码兼容性,因此如果您需要这些旧版本之一,您可以使用适当的 Python 版本从源代码构建 MySQL Shell。

修正错误

  • 在调试模式下,MySQL Shell 在处理 SQL 字符串中包含的字符时提出断言。(缺陷号 30286680)

  • 如果将 Python lambda 添加为 MySQL Shell 扩展对象的成员,则当 MySQL Shell 关闭时,Python 对象未正确释放,从而导致分段错误。(缺陷号 30156304)

  • 在交互模式下执行 Python 代码时可能会发生内存泄漏。(缺陷号 30138755)

  • 除非存在活动会话,否则无法显示 MySQL Shell 报告的帮助信息。MySQL Shell 现在仅在实际运行报告之前检查打开的会话。(缺陷号 30083371)

  • 如果为 MySQL Shell 连接设置了默认模式,并且在建立连接后设置了不同的默认模式,则 MySQL Shell 的\reconnect命令会尝试使用原始连接中的默认模式。用户当前的默认架构现在用于重新连接尝试。(缺陷号 30059354)

  • 由于 MySQL Shell 8.0.16 中的更改引入了错误,Windows Installer 用于安装 MySQL Shell 的 MSI 文件使用应用程序二进制文件 (mysqlsh) 的路径覆盖了 Windows PATH 环境变量,删除了所有其他存在的路径. 该问题现已解决。(缺陷 #29972020,缺陷 #95432)

  • 当该\reconnect命令用于尝试重新连接到服务器时,如果用户设置的最后一个活动模式似乎不再可用,MySQL Shell 现在会尝试连接没有模式集。(漏洞#29954572)

  • 在交互模式下,MySQL Shell 现在可以处理以斜杠和星号 (/*) 开头并以星号和斜杠 (*/) 结尾的多行注释。(缺陷号 29938424)

  • 与 SQL 语句结合使用时,MySQL Shell\source命令未正确处理。(漏洞#29889926)

  • 在 SQL 模式下的 MySQL Shell 中,如果包含一个USE语句的多个 SQL 语句在带有分隔符的一行上发出,则该 USE语句未被正确处理。(漏洞#29881615)

  • 如果使用 MySQL Shell 的 JSON 导入实用程序将大量 JSON 文档发送到处理能力不足的服务器,该实用程序可能会用批量准备好的文档填满写入队列,从而导致连接超时和导入失败。该实用程序现在等待读取来自服务器的响应,然后再将下一批准备好的文档发送到服务器。(漏洞#29878964)

  • 当使用捆绑的 OpenSSL 包从源构建 MySQL Shell 时,未设置所需的链接器标志。该问题现已解决。(漏洞#29862189)

  • 如果在结果仍处于活动状态时在 MySQL Shell 中执行新查询,导致行被缓存,则并非所有行都由旧查询返回。(漏洞#29818714)