Documentation Home
MySQL Shell 8.0 发行说明  /  MySQL Shell 8.0.22 的变化(2020-10-19,全面上市)

MySQL Shell 8.0.22 的变化(2020-10-19,全面上市)

修复了 AdminAPI 错误

  • 由于错误#31467823 中引入的更改,AdminAPI 用户消息已更新为使用相同的术语。(缺陷号 31798724)

    参考资料:另请参阅:Bug #31462783、Bug #31467823。

  • 在 8.0.22 中,Group Replication 弃用了 group_replication_ip_whitelist 系统变量,取而代之的是 group_replication_ip_allowlist. 因此,AdminAPI 现在包含一个名为的新选项 ipAllowlist,并弃用了 与 和 一起使用的ipWhitelist选项 。 dba.createCluster(), Cluster.addInstance()Cluster.rejoinInstance()

    无论目标实例版本如何,如果 ipWhitelist使用 MySQL Shell 都会打印弃用警告。当目标实例是 8.0.22 或更高版本时,Group Replication 报告弃用警告,但 AdminAPI 通过确保根据实例上运行的 MySQL 版本设置适当的变量来避免这种情况。如果目标实例是 8.0.22 或更高版本并且使用旧 ipWhitelist选项,AdminAPI 会更新新的 group_replication_ip_allowlist 系统变量。在运行 MySQL 8.0.21 或更早版本的实例上,AdminAPI 更新旧的 group_replication_ip_whitelist 系统变量。

    这项工作还修复了 中的一个错误 Cluster.options(),该错误显示了 MySQL Shell 可配置的所有组复制选项的列表。当未设置或不存在选项(例如在特定版本中)时,它将显示为具有空值。但是,当您将 all选项传递给 时 Cluster.options(),此类变量已从列表中排除。(缺陷号 31798495)

  • dba.configureLocalInstance()dba.configureInstance()操作不能用于属于非托管复制组的实例 。这使得无法创建集群管理员帐户,而在将组复制组采用到 InnoDB 集群时需要创建该帐户。创建集群管理员帐户对于 InnoDB 集群的远程管理非常重要,并且可以避免在每个实例上手动创建用户和所需的权限。该修复程序确保dba.configureLocalInstance() 并且dba.configureInstance()可以针对属于非托管复制组的实例执行。因为此类实例已准备好供 InnoDB Cluster 使用,所以会出现一条消息来确认这一点。(缺陷号 31691232)

  • dba.rebootClusterFromCompleteOutage() 操作仅GTID_EXECUTED 在验证具有最多事务的实例时进行检查。已收到(并经过认证)但尚未执行的交易不包含在该支票中。此外,通过组复制应用程序以外的复制通道接收的事务也未在该检查中考虑,因为该实例可能是集群运行时的主要实例。忽略这些事务会导致数据丢失。现在,任何已知和托管的复制通道都被视为检查的一部分。(缺陷号 31673163)

  • 如果被删除的dba.removeInstance()实例不仅无法访问而且无法解析,则操作失败,当实例在容器中运行时,该实例在删除时会删除其自己的 DNS 记录时可能会出现这种情况。

    即使启用了强制,也无法删除实例,因为通过检查它是否可解析来确保给定实例是有效地址的验证。如果该验证失败,则不会尝试其他任何操作。该修复从整个 AdminAPI 中完全删除了地址解析。该检查是多余的,因为无效地址最终会在打开连接时导致错误。留下 IPv6 地址语法验证以提醒您 ::1应将其指定为 [::1]. (缺陷号 31632606)

  • 在未指定用户名的情况下调用 会导致 AdminAPI 尝试使用操作系统用户名而不是用于连接集群对象的凭据进行连接。现在,如果未提供凭据,它们将从目标服务器的连接选项中获取。(缺陷号 31632554)Cluster.rejoinInstance("host:port")

  • 使用 MySQL Clone 向集群添加实例并监控数据传输时,MySQL Shell 可能会意外停止。这是由于假设性能模式将提供有关克隆的所有四个阶段的信息,如果数据集非常小,这些信息可能不存在。该修复可确保根据每次可用的信息执行更新。(缺陷号 31545728)

  • 当一个无法访问的主实例被强制从集群中移除时, group_replication_group_seeds 系统变量没有更新,因为组状态是从主实例中查询的,而主实例是缺失的。集群处于不一致状态,如果任何实例重新启动,它们将无法自动重新加入,因为 group_replication_group_seeds 包含无效地址,这导致组复制中止尝试加入组。(缺陷号 31531704)

  • 如果validate_password启用了该插件,则setupAdminAccount()setupRouterAccount()操作将失败并出现错误,指示密码不符合策略要求。无论密码是否符合策略要求,都会发生这种情况。(缺陷号 31491092)

  • dba.createCluster()失败的情况下,元数据记录被留下并且组复制也被启动。集群处于不一致状态,再次调用时无法恢复 dba.createCluster()。现在,dba.createCluster() 操作期间的元数据更改包含在事务中,因此只有在操作成功时才​​会提交集群和实例记录。如果创建操作未成功完成,组复制也会停止。

    同样, Cluster.addInstance() 已更改以确保仅在其他一切都成功完成时才插入其元数据记录。重试时,它会跳过任何可能导致冲突的步骤,因为组复制已经在运行。这引入了行为更改,其中添加属于组但不在元数据中的实例只是将其添加到元数据中,而不是中止并要求您执行 Cluster.rescan()。(缺陷号 31455419)

  • 如果连接在操作期间超时 Cluster.status() ,MySQL Shell 可能会挂起很长时间。为了提高响应速度,AdminAPI 操作的默认超时已从 10 秒减少到 2 秒。这确保 Cluster.status() 了在存在无法访问的实例时,诸如此类的操作不会出现长时间冻结。(缺陷号 30884174)

  • 在 InnoDB Cluster 或 InnoDB ReplicaSet 中运行的实例都需要具有相同的管理帐户密码。在加入 InnoDB Cluster 或 InnoDB ReplicaSet 的实例上的密码与其他实例不匹配的情况下,错误消息没有解释这一点,实例无法加入。现在,在这种情况下会检测到错误,并且生成的消息会提到密码是失败的原因。建议您使用该setupAdminAccount()操作设置管理员帐户,请参阅 为 AdminAPI 创建用户帐户。(缺陷号 30728744)

添加或更改的功能

  • MySQL Shell 中有两个新实用程序可用于从 MySQL 服务器实例导出单个表。

    • MySQL Shell 的新表转储实用程序 util.dumpTables()支持从模式中导出选择的表或视图,从内部部署的 MySQL 实例到 Oracle 云基础设施对象存储桶或一组本地文件。它的工作方式与 8.0.21 中引入的实例转储实用程序 util.dumpInstance()和模式转储实用程序util.dumpSchemas()相同,但具有不同的合适选项选择。然后可以使用 MySQL Shell 的转储加载实用程序将导出的项目导入到 MySQL 数据库服务数据库系统(简称 MySQL 数据库系统)或 MySQL 服务器实例中util.loadDump()

    • MySQL Shell 的新表导出实用程序 util.exportTable()将 MySQL 关系表导出到本地服务器或 Oracle 云基础设施对象存储桶中的各种格式的数据文件中。然后可以使用 MySQL Shell 的并行表导入实用程序将数据上传到目标 MySQL 服务器上的表中 util.importTable(),该实用程序使用并行连接为大型数据文件提供快速数据导入。数据文件也可用于将数据导入不同的应用程序,或作为单个数据表的轻量级逻辑备份。

  • 从 MySQL Shell 8.0.22 开始,当您使用 MySQL Shell 的实例转储实用程序和架构转储实用程序将架构导出到 Oracle Cloud Infrastructure 对象存储桶时, util.dumpInstance()并且 util.dumpSchemas()在转储期间,您可以为每个项目生成一个预先验证的请求 URL。当该ocimds 选项设置为 true 时,实用程序默认执行此操作,您可以使用 ociParManifestociParExpireTime选项控制该功能。运行 MySQL Shell 的转储加载实用程序的用户帐户 util.loadDump()然后使用预先验证的请求 URL 来加载转储文件,而无需额外的访问权限。

修正错误

  • util.loadDump()如果数据文件的大小大于与最大事务大小相关的适用服务器限制(例如 限制),则 MySQL Shell 的转储加载实用程序 将因错误而停止max_binlog_cache_size。现在,如果上传的字节数即将超过 bytesPerChunk创建数据文件的实用程序设置(存储在转储元数据中)的 1.5 倍,该实用程序将停止在文件中间加载数据。然后重新启动数据加载以上传文件的其余部分。由于这个新的保护措施, bytesPerChunkMySQL Shell 的实例转储实用程序util.dumpInstance()、模式转储实用程序util.dumpSchemas()和表转储实用程序的默认设置util.dumpTables()已从 32 MB 增加到 64 MB。(缺陷号 31945539)

  • MySQL Shell 的实例转储实用程序 util.dumpInstance()和模式转储实用程序 util.dumpSchemas()在决定是否分块表数据时没有考虑行大小,仅考虑行数。因此,即使行大小超过指定的转储块大小,包含大量数据的行数较少的表也可能会绕过分块。这些实用程序现在执行分块而不管行数,除非估计数据适合指定大小的单个块。(缺陷号 31938831)

  • MySQL Shell 的实例转储实用程序 util.dumpInstance()、模式转储实用程序 util.dumpSchemas()和表转储实用程序 util.dumpTables()使用分块算法将表的数据拆分为多个文件。该算法可能会创建大量非常小的文件,从而导致转储出现问题。现在指定了最小有效值,并且增强了算法以确保检查的范围始终足够大以包含足够的行。(缺陷号 31909408)

  • 当 MySQL Shell 的实例转储实用程序 util.dumpInstance()或模式转储实用程序 util.dumpSchemas()将表拆分为块时,如果索引列中的最大值接近整数的最大值,则可能会发生整数溢出、循环和随之而来的内存不足错误。现在添加了额外的检查以避免这种情况。(缺陷号 31896448)

  • 如果转储的字符串恰好是 2048 字节,则损坏的 SQL 文件可能会出现在 MySQL Shell 的转储中,这是由于现在已解决的内部模块错误。(缺陷号 31843832)

  • 在使用 MySQL Shell 的转储加载实用程序导入数据时使用的 Oracle Cloud Infrastructure Compute 实例上的管理用户帐户 util.loadDump()无法撤销其自身不具备的 MySQL 系统模式(mysql和 )的权限。当使用 兼容性选项时,sys受影响 REVOKE的语句现在从 MySQL Shell 的实例转储实用程序 util.dumpInstance()和模式转储实用 程序创建的实例或模式转储中删除。(缺陷号 31842532)util.dumpSchemas()strip_restricted_grants

  • MySQL Shell 的实例转储实用程序和模式转储实用程序 dumpInstance() 和 dumpSchemas()gtid_executed在建立读锁之前获取了系统变量的值,这可能会导致与转储数据不一致。现在,在读取锁定处于活动状态时检索 GTID 集。(缺陷号 31706940)

  • 从 MySQL Shell 8.0.22 开始,您可以使用 –pym命令行选项在 MySQL Shell 的 Python 模式下将指定的 Python 模块作为脚本执行。--pym工作方式与 Python 的 -m命令行选项相同。(缺陷号 31694202)

  • 在 Python 模式的 MySQL Shell 中,如果它们具有未提供的可选参数,则无法从全局扩展对象调用在 JavaScript 中注册的函数。(缺陷号 31693096)

  • MySQL Shell 将字符序列 */ 视为注释的结尾,即使它是带引号的字符串的一部分。(缺陷号 31689135)

  • MySQL Shell 的实例转储实用程序和模式转储实用程序 dumpInstance() 和 dumpSchemas() 会自动选择一个索引列来对数据进行排序和分块。当表中存在具有功能键部分的索引时,对索引列的查询返回NULL列名,导致实用程序出现异常。这些列名现在在查询中被过滤掉了。(缺陷号 31687059)

  • MySQL Shell 的并行表导入实用程序 util.importTable()有一个新选项 decodeColumns,以及对列选项的增强,使您能够以与LOAD DATA 语句相同的方式从导入文件中捕获列以进行输入预处理(或丢弃它们)。该选项以与语句子句 decodeColumns相同的方式为捕获的数据指定预处理转换,并将它们分配给目标表中的列。(缺陷号 31683641)SETLOAD DATA

  • MySQL Shell 的转储加载实用程序 loadDump() 现在会在开始检索转储文件之前验证它是否可以打开和写入进度状态文件,这样如果导入随后将失败,该实用程序就不会花时间获取转储文件是因为。(缺陷号 31667539)

  • 在 MySQL 8.0 之前,拥有所有权限的用户帐户使用语句GRANT ALL PRIVILEGES,而不是完整的权限列表。当 MySQL Shell 的实例转储实用程序 dumpInstance() 用于转储实例时, ALL PRIVILEGES从语句中删除,使帐户没有特权。该实用程序现在将此授权替换为管理员角色。(缺陷号 31661180)

  • MySQL Shell 的实例转储实用程序和模式转储实用程序 dumpInstance() 和 dumpSchemas() 以及转储加载实用程序 loadDump() 之前在主线程闲置 8 小时后超时。超时现在已无限期延长(至 1 年),因此较长的数据加载时间不会导致转储或导入失败。(漏洞#31652265)

  • MySQL Shell 的转储加载实用程序 loadDump() 现在在其LOAD DATA 语句中包含一条注释,以标识当前正在加载的数据块。如果需要取消导入,可以根据这些信息来决定是让这个chunk的导入完成还是立即停止。(缺陷号 31646650)

  • 以前,MySQL Shell 的转储加载实用程序 loadDump() 在模式中的所有表完成加载后关闭 DDL 文件。对于包含大量 DDL 文件的转储,这可能会导致返回无法解释的运行时错误。该实用程序现在会在读取 DDL 文件后立即关闭它们。(缺陷号 31645896)

  • MySQL Shell 的转储加载实用程序 loadDump() 以前仅使用其主线程来执行表的 DDL 脚本。对于包含大量表的转储,获取 DDL 脚本可能会对所用时间产生重大影响。该实用程序现在使用其所有线程获取并执行表的 DDL 脚本,但视图的 DDL 脚本除外,它们是并行获取的,但仅在主线程中执行以避免竞争条件。(缺陷号 31645806)

  • MySQL Shell 的转储加载实用程序 loadDump() 现在按顺序加载视图,并且仅在加载所有模式的所有表和占位符之后,确保视图不引用尚不存在的项目。(缺陷号 31645792)

  • 当安装了 Python 解释器的捆绑兼容版本时,MySQL Shell 现在会忽略任何其他可用的 Python 安装。(缺陷号 31642521)

  • 当 MySQL Shell 的转储加载实用程序 loadDump() 正在导入用户及其角色和授权时,如果用户已经存在于目标实例中,现在将返回错误,并且不会应用来自转储文件的用户授权。以前,授权应用于现有用户。(缺陷号 31627432)

  • MySQL Shell 的转储加载实用程序 loadDump() 现在可以选择 updateGtidSetgtid_executed源 MySQL 实例的 gtid_purgedGTID 集应用到目标 MySQL 实例上的 GTID 集。您可以根据目标 MySQL 实例的版本附加或替换 GTID 集。(缺陷号 31627419)

  • MySQL Shell 的实例转储实用程序 dumpInstance() 和转储加载实用程序 loadDump() 现在可以选择从转储文件或导入中包含 ( includeUsers) 或排除 ( ) 指定用户帐户。excludeUsers 您可以使用这些选项来排除不接受导入到 MySQL 数据库系统的用户帐户,或者目标 MySQL 实例上已经存在或不需要的用户帐户。(缺陷号 31627292)

  • deferTableIndexes选项设置为 all,MySQL Shell 的转储加载实用程序 loadDump() 将所有二级索引的创建推迟到加载表之后。以前,在这种情况下无法加载具有包含自动增量值的唯一键列的表。deferTableIndexes当该选项设置为 时,该实用程序还创建在具有自动增量值的列上定义的索引 all。(缺陷号 31602690)

  • util.dumpInstance()MySQL Shell 的实例转储实用程序和模式转储实用程序 util.dumpSchemas()用于将文件传输到 Oracle Cloud Infrastructure 对象存储桶 的上传方法 的文件大小限制为 1.2 TiB。在 MySQL Shell 8.0.21 中,多部分大小设置意味着首先应用多个文件部分的数字限制,创建大约 640 GB 的限制。从 MySQL Shell 8.0.22 开始,多部分大小设置已更改为允许完整文件大小限制。(缺陷号 31589858)

  • MySQL Shell 的升级检查器实用程序 checkForServerUpgrade() 现在检查过时的 NO_AUTO_CREATE_USERSQL 模式。(漏洞 #31501981,漏洞 #99903)

  • MySQL Shell 的转储加载实用程序 loadDump() 的表加载并行化得到了改进。(缺陷号 31441903)

  • 如果服务器全局字符集变量的设置与当前会话的设置不同,则 MySQL Shell 的并行表导入实用程序 importTable() 无法将数据导入到在名称包含非 ASCII 字符的会话中创建的表中。现在,当指定实用程序的 characterSet 选项时,MySQL Shell 将执行 SET NAMES具有给定值的语句。(缺陷号 31412330)

  • 如果设置了全局 SQL 模式,则 MySQL Shell 的并行表导入实用程序 importTable() 无法导入数据 NO_BACKSLASH_ESCAPES。该实用程序现在清除为运行导入而创建的会话中的全局 SQL 模式。(缺陷号 31407133)

  • 当定义为 MySQL Shell 扩展对象成员的函数有许多可选参数但没有必需参数时,在某些情况下调用零参数或一个参数的函数会返回错误。(缺陷号 30744994)

  • MySQL Shell 的db全局对象在查询其属性时未返回当前模式。(缺陷 #30296825,缺陷 #96839)

  • MySQL Shell 有一个新命令\disconnect。该命令将 MySQL Shell 的全局会话(session全局对象表示的会话)与当前连接的 MySQL 服务器实例断开连接,这样您可以关闭连接但仍继续使用 MySQL Shell。(缺陷号 28240416)