Documentation Home
MySQL Shell 8.0 发行说明  /  MySQL Shell 8.0.11 的变化(2018-04-19,全面上市)

MySQL Shell 8.0.11 的变化(2018-04-19,全面上市)

AdminAPI 添加或更改的功能

  • 运行 MySQL 8.0.11 及更高版本的 InnoDB Cluster 实例现在可以配置为远程使用 InnoDB Cluster,无需登录实例并在 dba.configureLocalInstance()本地运行。使用新的dba.configureInstance()操作,它可以远程自动配置兼容实例以供InnoDB Cluster使用,如果需要还支持在配置后远程重启兼容实例。

    类似地,兼容实例支持在任何集群拓扑更改后由 AdminAPI 自动保留对其设置的任何更改。现在,如果您创建集群、将实例添加到集群或从支持此功能的集群中删除实例,则在使用远程实例时,无需登录实例并运行dba.configureLocalInstance()以将更改持久保存到实例的选项文件。这使得使用构建在网络实例上的生产集群变得更加容易。这也确保实例在重启时自动重新加入集群。

    作为此功能的一部分,进行了以下改进:

    • 改进了消息显示。

    • 改进了对 Debian 和 Ubuntu 上环回主机名的检测,以及基于主机名的本地实例。

    • 改进了所需配置更改的显示。

    • 用配置检查 替换实例的自动配置, dba.createCluster如果 检查失败则中止命令。 dba.addInstancedba.checkInstance()

    • 在交互模式下指定帐户时,如果用户的主机名是本地的,例如 localhost,您可以选择使用主机名重新创建为远程使用配置的帐户%,或者创建一个新的 InnoDB Cluster 管理员帐户。

    参考资料:另请参阅:Bug #27608299、Bug #27112727、Bug #27629803。

修复了 AdminAPI 错误

  • 使用创建集群管理用户后 dba.createCluster(),MySQL Shell 尝试使用新用户重新连接,但仍使用 localhost,但失败导致整个配置失败。现在 MySQL Shell 不再在管理帐户创建和实例配置之间切换帐户。(漏洞#27673816)

  • Bug#27545850 引入的更改意味着现在无法在插件启动或停止时修改组复制相关选项。AdminAPI 操作已被修改以确保它们遵守此更改,并且在插件启动时尝试发出将更改组复制操作的语句会导致错误。没有检查插件何时停止,因此如果插件有可能停止,您应该确保不要尝试配置实例。(漏洞 #27545850)

  • 将实例重新加入集群时,显示的输出已得到改进。(漏洞#27437389)

  • dba.createCluster()如果在具有 的实例上使用 该函数将失败innodb_page_size=4k,因为instance_nameInnoDB 集群元数据中实例表的列使用 VARCHAR大小为 256 的 a,这对于 innodb_page_size=4k. 但是,此列的大小无法更改,因为它用于保存集群成员的主机名,最长可达 255 字节。此限制现在在使用 dba.createCluster()dba.checkInstanceConfiguration()dba.configureInstance()和 时得到验证dba.configureLocalInstance()。(漏洞 #27329079)

  • 当使用路径中包含非 ASCII 字符的沙箱目录时,管理沙箱的 AdminAPI 命令失败并出现错误。当用户名具有非 ASCII 字符时会发生这种情况,因为默认沙箱目录是$HOMEor %userprofile%路径的子目录,通常基于当前用户名。该修复程序为 AdminAPI 使用的内部配置工具添加了 Unicode 支持。(漏洞#27181177)

  • MySQL Shell 现在 通过计算 的结果来设置group_replication_local_address based on的值。该 变量默认为 3306,在这种情况下 MySQL Shell 设置 为,导致端口 33061 而不是之前的默认值 13306。(错误 #27146799)port((port * 10) + 1)portgroup_replication_local_address((3306 * 10) +1)

  • 所有需要连接的 AdminAPI 命令的联机帮助显示了有关连接数据的详细信息,这使每个命令的详细信息变得混乱。现在,帮助显示连接详细信息的概览以及有关从其他地方获得更多帮助的信息。(缺陷号 27146290)

  • 在使用默认系统配置的 Debian 类型平台上创建集群时, cluster.addInstance()如果在连接参数中使用了实例主机名,则该命令会失败并出现错误。发生这种情况是因为在这些平台上主机名默认解析为 IP 地址 127.0.1.1,但组复制组通信服务 (GCS) 不支持此 IP 地址。该修复程序向 dba.createCluster()cluster.addInstance()函数添加了验证,以验证连接主机名是否解析为 127.0.1.1 并在这种情况下发出错误。(缺陷号 27095984)

  • Cluster.forceQuorumUsingPartitionOf() 操作不适用于非 root 用户,即使该用户拥有所有必需的权限。该修复确保指定的用户用于连接到所有实例,而不是 root 用户。(漏洞 #27089930)

  • dba.createCluster()作为不具备所有必需权限的用户以交互模式 发出会导致意外停止。发行时生成的错误消息dba.configureLocalInstance()以及 dba.checkInstanceConfiguration()正在使用的帐户没有所需权限的错误消息也得到了改进。(错误#27076753,错误#27324699)

  • 当使用adoptFromGR将组复制组转换为 InnoDB 集群时,输出建议添加实例。此消息现已改进,以显示实例已添加。(漏洞 #27061615)

  • 在交互模式下, cluster.removeInstance()AdminAPI 函数不接受带有选项字典的第二个参数。这阻止了该选项的使用,该force 选项因错误而失败。(漏洞#26986141)

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

  • cluster.addInstance()函数未检查 server_uuid添加到集群的有效性。现在,将server_uuid 检查加入集群的实例的唯一性,如果不是,则会生成错误并阻止该实例加入集群。(漏洞#26962715)

  • 设置集群时,会创建复制用户以启用分布式恢复。如果启用了 MySQL Shell 日志记录,则CREATE USER 语句不会正确添加到日志中。(缺陷号 26938488)

  • 和操作未正确报告与实例 dba.checkInstanceConfiguration()的 . 现在,当报告错误时,它会显示在不符合 InnoDB 集群要求的变量列表中。 dba.configureLocalInstance()server_id

    此外,已从 my.cnfAdminAPI 为运行 MySQL 8.0.11 及更高版本的沙箱实例创建的 X 插件负载中移除,因为这些版本默认安装了 X 插件。(缺陷号 26836230)

  • 使用dba.configureLocalInstance()withclusterAdmin选项创建可以管理集群的用户时,创建的帐户拥有太多权限。(缺陷号 26737608)

  • 当您创建集群并向其添加实例时,会创建内部用户,当实例加入集群时,组复制需要这些用户进行分布式恢复。这些自动生成的复制用户在从集群中删除或解散集群后不会从实例中删除。(缺陷号 26395608)

  • 如果实例包含 InnoDB Cluster 元数据但是是独立的,换句话说它不属于集群,则无法使用dba.dropMetadataSchema(). (漏洞 #26315635)

  • 如果您dba.configureLocalInstance() 针对一个已经对 InnoDB Cluster 使用有效的实例发出并指定了该myCnf选项,但该 my.cnf文件不可读,则该操作将打印出存在需要修复的问题。现在,当您myCnf使用 dba.configureInstance()和 设置选项时,dba.configureLocalInstance()操作仅在必要时使用它。换句话说,如果目标实例对 InnoDB Cluster 使用无效,则必须更改设置。(漏洞#25702994)

  • cluster.describe()cluster.status()AdminAPI 方法返回包含相同信息但某些字段由不同标签标识的 JSON 对象 。为了使标签保持一致,返回的对象cluster.describe()已更改,因此instances已替换为topology,hostaddress。(缺陷号 25247515)

  • adoptFromGR:true未正确检测到使用已属于集群的实例上 的选项从现有组复制组创建集群。现在检测到这种情况并产生错误。(错误#25061891,错误#25664766)

  • MySQL Shell 能够创建到 IPv6 地址的会话,但它无法使用此类连接创建 InnoDB 集群,报告与 URI 相关的错误。这与包含已修复的 IPv6 地址的 URI 编码有关。核心问题,AdminAPI 的 IPv6 支持是一个已知问题,因为组复制需要 IPv4 网络,请参阅 组复制要求。InnoDB Cluster 相关操作的实现已被修改,以检查是否使用基于 IPv4 的会话和 IPv4 连接数据执行操作。如果不满足这些条件,则会生成异常。(漏洞 #25042407)

  • 尝试将两个具有相同标签的不同实例正确添加到 InnoDB 集群会导致错误,但是具有重复标签的实例将保留部分初始化的配置。(漏洞#24761416)

添加或更改的功能

  • 重要变更;Microsoft Windows: 在安装 MySQL Shell 之前,请确保您的 Windows 系统上安装了 Visual C++ Redistributable for Visual Studio 2015(可从 Microsoft 下载中心获取)。这现在适用于 MySQL Shell 的社区版和商业版。

  • 重要变更;X DevAPI: 生成文档 ID 的方式已更改。现在文档 ID 由服务器生成,而不是由客户端生成。因此,getLastDocumentID(), getDocumentIdgetDocumentIDs()方法已被删除。要获取由 8.0.11 及更高版本的服务器自动生成的文档 ID 列表,请使用 Result.getGeneratedIDs(). 为集合中的文档 ID 生成的列类型已从 更改 VARCHAR(32)VARBINARY(32)。生成的文档 ID 可以通过包含 ID 手动覆盖,但您必须遵守服务器生成的 ID 以避免冲突。如果您使用的是 InnoDB Cluster,请使用 mysqlx_document_id_unique_prefix 变量以确保您的文档可以在 ReplicaSets 之间移动。

    现在,如果您要将文档添加到运行 MySQL 8.0.11 之前版本的服务器上的集合中,则必须手动包含文档 ID,因为这些版本不会自动添加 ID。

  • X DevAPI:NOWAIT在锁定操作中添加了对和SKIP LOCKED InnoDB锁定模式 的支持现在您可以将这些锁定模式与lockShared()lockExclusive()方法一起使用,例如:

    • Table.select().lockShared([LockContention])

    • Table.select().lockExclusive([LockContention])

    • Collection.find().lockExclusive([LockContention])

    • Collection.find().lockExclusive([LockContention])

    哪里LockContention可以是以下之一:

    • DEFAULT- 如果函数遇到行锁,它会等待直到没有锁

    • NOWAIT- 如果函数遇到行锁,它会中止并产生 ER_LOCK_NOWAIT错误

    • SKIP_LOCKED- 如果函数遇到行锁,它会跳过该行并继续

    有关详细信息 ,请参阅使用 NOWAIT 和 SKIP LOCKED 锁定读取并发

  • 集合的索引得到了改进,使大型文档集合的导航更加高效。现在,您可以根据集合中文档中的一个或多个字段创建索引,使用将集合文档中的字段映射到 MySQL 类型的 JSON 文档。除了空间索引和 GeoJSON 数据之外,还支持大多数 MySQL 类型。

  • caching_sha2_password MySQL Shell 现在可以使用使用身份验证插件 的帐户连接到 MySQL 服务器。假设服务器配置为加密连接,您可以通过 X 协议和经典 MySQL 协议使用此类帐户。请参阅 使用加密连接

    重要的

    如果您没有使用加密连接,要通过 X 协议与使用 caching_sha2_password身份验证插件的帐户连接,用户的密码必须存储在缓存中。如果不使用加密连接,目前无法通过 X 协议存储密码。

    当使用经典 MySQL 协议连接此类帐户和未加密连接时,您可以使用 RSA 密钥对配置 MySQL 以进行密码交换。MySQL Shell 支持此类连接,并添加了以下命令选项:

    有关详细信息,请参阅 缓存 SHA-2 可插入身份验证

  • MySQL Shell 现在有一个配置文件,用于存储跨会话的配置更改。使用新的 \optionMySQL Shell 命令查询和更改配置选项。或者对对象使用以下方法shell.options

    shell.options.set_persist(optionName, value)
    shell.options.unset_persist(optionName, value)

    此外,还添加了新defaultMode选项,使您能够配置 MySQL Shell 启动时使用的编程语言。您可以使用命令选项覆盖默认模式。

  • util.checkForServerUpgrade([uri]) 操作已扩展为检查以下不兼容的功能:

    • 过时的sql_mode

    • 共享表空间中的分区表

    • 删除的功能

修正错误

  • X DevAPI: 针对 X DevAPI 和函数更正了 SQL 通配符Schema.getTable()的 处理Schema.getCollection()Session.getSchema()(缺陷号 26392984)

  • 当该\quit命令用于退出 MySQL Shell 时,此事件可能会在错误日志中记录为丢失的连接。该问题现已解决。(缺陷 #27821045,缺陷 #90281)

  • 当使用 MySQL Shell 命令行选项 --json=raw时,输出实际上以漂亮的打印格式提供,并显示一个空字符串来代替错误消息。这些问题现已得到纠正。(错误#27733996,错误#26737357)

  • 当从脚本执行 MySQL Shell 命令时,交互式提示密码和确认不可用。现在,在脚本中使用命令时默认启用交互式提示,就像在命令行中使用它们时一样。命令行选项禁用以两种方式使用的 MySQL Shell 命令的--no-wizard交互式提示。(漏洞 #27702250)

  • util.checkForServerUpgrade()如果未随命令提供所需密码, 该操作现在会以交互方式提示用户输入密码。如果该 --no-wizard选项已用于禁用连接向导,则缺少凭据反而会导致错误并且不会执行该功能。(漏洞 #27514395)

  • util.checkForServerUpgrade()操作要求传递给函数的用户有错误的权限。用户现在需要ALL 权限,并且不需要GRANT OPTION权限。(漏洞 #27506702)

  • util.checkForServerUpgrade()操作拒绝包含 %(百分比)符号或指定为数字 IP 地址的主机名。(错误#27506079,错误#27513260)

  • 默认情况下,假定 MySQL Shell 连接需要密码,这是在登录提示时要求的。提供了一个新的 MySQL Shell 命令行选项 --no-password来明确指定不使用密码,并禁用密码提示。--no-password如果正在使用套接字对等凭据身份验证(用于 Unix 套接字连接),或者用于用户拥有无密码帐户的任何身份验证方法,则可以使用 该选项(但请注意,这种情况是不安全的,不推荐)。

    MySQL Shell 之前提供的指定连接不使用密码的方法仍然有效,可以代替该--no-password 选项使用。这些方法如下:

    • 如果您使用 URI 类型字符串进行连接,请在 URI 类型字符串 :中的用户名后放置一个,但不要在其后指定密码。

    • 如果您使用单独的参数进行连接,请将--password=选项指定为空值。

    (缺陷号 26986360)

  • 当返回结果集时发生错误时,提取操作会中断,但不会报告相关的错误。现在错误报告正确。(缺陷号 26906527)

  • 已将对微秒的支持添加到 mysqlx.dateValue()函数和 Date对象中。(缺陷号 26429497)

  • 改进了函数的参数验证和错误消息 mysqlx.dateValue()。(错误#26429426,错误#26429377)

  • db全局对象不可用于 SQL 模式下的连接 。\connect在那种情况下,此引用已从命令返回的消息中删除。(缺陷号 26428665)

  • 已安装的 MySQL 程序组中的 Microsoft Windows 菜单中不再提供卸载 MySQL Shell 的快捷方式。MySQL Shell 的卸载应该通过 MySQL Installer 来处理。(漏洞#26317449)

  • MySQL Shell 的运行时计时器,它报告每次查询执行所花费的时间,已被重构以提供更高的 4 位小数秒精度。(错误#25976636,错误#86135)

  • 在断开连接的情况下,MySQL Shell 不会重新连接到连接丢失之前正在使用的模式。现在,在自动重新连接过程中以及使用\reconnect 命令手动触发的重新连接过程中,用户设置的最后一个活动模式将被恢复。(漏洞 #25974003,漏洞 #86115)

  • 当与服务器的连接丢失时,MySQL Shell 不再尝试自动重新连接。提供了一个新的 MySQL Shell 命令 \reconnect,它使 MySQL Shell 使用现有连接参数为当前全局会话尝试多次重新连接尝试。如果这些尝试不成功,您可以使用该\connect命令并指定连接参数来建立新的连接。(缺陷号 25105307)

  • 如果启动 MySQL Shell 并与 MySQL 服务器建立连接,然后用户在不执行任何命令的情况下退出 MySQL Shell,则会发生内存泄漏。(漏洞#24794589)