Documentation Home
MySQL Shell 8.0 发行说明  /  MySQL Shell 8.0.13 的变化(2018-10-22,全面上市)

MySQL Shell 8.0.13 的变化(2018-10-22,全面上市)

弃用和移除说明

  • 如果您没有使用 \connect命令指定协议或在启动 MySQL Shell 时,MySQL Shell 会自动尝试使用 X 协议进行会话连接,如果 X 协议不可用,则回退到经典 MySQL 协议。明确指定该行为的连接类型选项-ma现在已弃用。

    -mx对于 X 协议和经典 MySQL 协议连接,使用带有连接类型选项和 的单个破折号 -mc也已弃用。 这些选项现在必须在命令中或在启动 MySQL Shell 时使用双破折号(即--mx--mc)指定。\connect它们现在被定义为长格式--mysql ( --mc) 和--mysqlx ( --mx) 连接类型选项的别名。(漏洞#27363459)

  • mysqlsh 命令行选项 现在 已弃用。请改用选项 ( ) 和( )。(缺陷号 26049681)--dbpassword[=password]--dbuser=user_name--password-p--user-u

AdminAPI 添加或更改的功能

  • 的行为 Cluster.dissolve() 已更新,使其与其他 AdminAPI 命令更加一致。现在您不必传递 force启动命令的选项,并且有一个交互式提示可用。当属于集群的所有实例都在线时,如果MySQL Shell以交互方式运行,则会提示您确认解散集群的操作。如果 MySQL Shell 在非交互模式下运行,当所有实例都可访问或在线时,该命令将从集群中删除实例。如果实例不可访问,则会抛出错误。传入force选项以删除无法访问的实例。

    参考资料:另请参阅:Bug #27833605、Bug #27837231。

  • 一个新的可选参数exitStateAction可以 dba.createCluster()cluster.addInstance() 命令一起使用,它使您能够配置 group_replication_exit_state_action InnoDB Cluster 成员的变量。该 group_replication_exit_state_action 变量使您能够指定在成员非自愿离开组时采取的操作。当 group_replication_exit_state_action 设置为ABORT_SERVER(默认值)时,实例会自行关闭,当 group_replication_exit_state_action 设置为时READ_ONLY,实例会切换到超级只读模式并进入Group ReplicationERROR状态。

  • 新的可选memberWeight选项可以与dba.createCluster()Cluster.addInstance() 函数一起使用,使您能够 group_replication_member_weight 在单主集群中设置 InnoDB Cluster 服务器实例的系统变量。默认值为50,换句话说系统变量默认。将 memberWeight选项设置为 0 到 100 之间的整数,以配置成员在故障转移选举过程中的权重。该值决定了在发生故障转移时实例被选为主要实例的机会。有关详细信息,请参阅 单主模式

修复了 AdminAPI 错误

  • dba.deploySandboxInstance()8.0.12 版中 的函数部署沙箱并包含log_syslog=OFF在实例的配置文件中。此变量在 MySQL 8.0.12 中已弃用,并在 MySQL 8.0.13 中被删除。现在,该变量已更新为包含loose_使服务器在 MySQL 8.0.13 沙箱中忽略它的前缀,同时保持与早期版本沙箱的兼容性。(漏洞 #28543536)

  • 有时,在将实例添加到现有集群时,实例会卡在分布式恢复阶段,导致报告的状态不可变 RECOVERING。此问题与 InnoDB Cluster 创建的内部复制用户自动生成的密码有关。(漏洞 #28219398,漏洞 #91348)

  • 在默认的交互模式下,每当使用 dba.rebootClusterFromCompleteOutage()不带任何参数的函数时,函数都会失败,并出现指定集群名称不存在的错误。现在,当函数在没有参数的情况下发出时,默认集群被假定。(漏洞 #28207565)

  • 与 相关的元数据服务器更改的处理 Cluster.addInstance() 已得到改进,导致以下更改:

    • 正确的会话现在用于元数据和组操作

    • 如果实例在组中但不在 InnoDB Cluster 元数据中 , 则 Cluster.addInstance() 操作中止并建议使用 Cluster.rescan()

    • 不必要的参数 super_user_password已被删除

    (漏洞 #28200661)

  • dba.deploySandboxInstance()由错误地在引号中显示的用户输出消息 生成的 Windows 脚本 。此外,脚本已得到改进,它们不再显示已执行的命令。(漏洞#28199954)

  • AdminAPIdba.createCluster()操作总是创建复制用户,即使使用该 adoptFromGR选项也是如此。但是,当采用一个已经存在的组复制组时,不需要创建额外的用户。(漏洞 #28054500)

  • AdminAPI 发出的与函数参数数量无效相关的错误消息未在消息文本之前包含相关对象和方法。这些消息现已标准化。(漏洞#27832594)

  • 使用dba.createCluster()or Cluster.addInstance()时,AdminAPI 错误地设置了 auto_increment_offset和 的值auto_increment_increment 。现在根据以下逻辑设置变量:

    (缺陷号 27084767)

  • AdminAPI 对组复制使用了不正确的术语。现在集群被描述为单主和多主,该multiMasterp选项已被弃用,并multiPrimary添加了该选项。(漏洞 #25926603)

  • quorum 丢失时调用的结果 dba.get_cluster().status()无法转换为 JSON 对象,因为结果对象的字符串表示形式包含转义序列。该问题不仅限于 Cluster.status()方法,而是影响了 Python 模式下 Shell API 返回的所有数组和字典。数组和字典的内部表示已得到修复。(缺陷 #91304,缺陷 #28200499)

添加或更改的功能

  • X DevAPI: 连接connect-timeout路径参数(请参阅使用类似 URI 的字符串或键值对连接到服务器)已添加到 X DevAPI,它使您能够指定客户端(例如 MySQL Shell)等待客户端的秒数停止尝试连接到无响应的 MySQL 服务器。的值connect-timeout必须是一个以毫秒为单位定义时间范围的非负整数。超时默认值为 10000 毫秒,即 10 秒。例如:

    // Decrease the timeout to 2 seconds.
    mysqlx.getSession('user@example.com?connect-timeout=2000');
    
    // Increase the timeout to 20 seconds
    mysqlx.getSession('user@example.com?connect-timeout=20000');

    要禁用超时,请将值设置为 0,这意味着客户端会一直等到底层套接字超时,这取决于平台。

  • MySQL Shell 提供的升级检查器实用程序,即全局对象的checkForServerUpgrade()功能 util,有几个增强功能:

    • 您现在可以使用升级检查器实用程序检查早期 MySQL 8.0.x 版本的服务器以及 MySQL 5.7 服务器的兼容性错误和升级问题。

    • 您现在可以指定您计划升级到的目标 MySQL 服务器版本。在 MySQL Shell 8.0.13 中,您可以指定版本 8.0.11(MySQL Server 8.0 GA 版本)、8.0.12 或 8.0.13。升级检查器实用程序执行与指定目标版本相关的检查。如果您指定短格式版本号 8.0,或省略该 targetVersion选项,该实用程序将检查是否升级到与当前 MySQL Shell 版本号(当前为 8.0.13)匹配的 MySQL 服务器版本号。

    • 已为删除的语法添加了检查GROUP BY ASC/DESC,如果在触发器、事件、视图、存储过程或函数中找到此语法,则返回错误消息。

    • 已为定义为 ENUMSET包含超过 255 个字符的元素的列添加了检查,如果找到任何此类列,则返回错误消息。

    • 升级检查器实用程序不再返回值,使其输出在使用自动化时更易于解析和处理。

    您可以从 MySQL Shell 中访问升级检查器实用程序或从命令行启动它。有关说明和更多信息,请参阅 MySQL Shell 实用程序

  • 现在可以使用lessmore等分页器显示 MySQL Shell 屏幕输出。 您可以使用选项、命令或 命令选项配置要使用的寻呼机 。这改进了您在 MySQL Shell 中处理较长文本输出的方式,特别是在线帮助和 SQL 操作的结果。请参阅 使用寻呼机shell.options[pager]\pager--pager

  • MySQL Shell 与命令行环境的集成得到了改进。使用语法将操作直接传递给 MySQL Shell 全局对象,绕过 REPL 接口。例如: mysqlsh [options] -- shell_object object_method [method_arguments]

    mysqlsh -- util check-for-server-upgrade user@example --output-format=JSON

    它执行 util.checkForServerUpgrade(user@example, {"outputFormat": "JSON"})与 MySQL Shell 等效的操作,并以 JSON 格式返回输出。这使得将 MySQL Shell 集成到您的自动化脚本中变得容易。要获得此接口的帮助,请使用 MySQL Shell 命令\help cmdline。请参阅 API 命令行集成

  • MySQL Shell 有一个新的 JSON 导入实用程序,使您能够将 JSON 文档从文件或标准输入导入到 MySQL 服务器集合或关系表。该实用程序自动解析和验证提供的 JSON 文档,并将它们插入目标数据库,无需使用多个 INSERT 语句或编写脚本来完成此任务。该实用程序可以使用 util.importJson()JavaScript 中的方法或 util.import_json()Python 中的方法在 MySQL Shell 会话中启动。从命令行,您可以使用-- util importJson语法或--import 命令来调用该实用程序。

修正错误

  • MySQL Shell(操作)提供的升级检查器实用程序 util.checkForServerUpgrade()不会报告已删除的函数,如果它们在视图或事件中使用。(漏洞#28642534)

  • MySQL Shell 在 JSON 输出中错误地将警告消息标记为错误消息。(缺陷号 28546510)

  • 当使用秘密存储保存 MySQL Shell 服务器连接密码时,如果在未指定端口或套接字的情况下建立经典 MySQL 协议连接,则无法为后续连接检索保存的密码。密码存储和检索过程现在确保用于存储密码的服务器 URL 与具有用户提供的连接选项的后续查询相匹配,即使默认值用于原始连接也是如此。(漏洞#28544628)

  • 对 MySQL Shell 提示进行了多项改进,包括处理超长文本、语句拆分和支持多行提示。为双行提示提供了新的示例提示主题文件,双行提示使用一行用于信息显示,而新行用于输入提示本身,因此可以显示附加信息而不会占用可用于文本输入的空间。(漏洞 #28515394,漏洞 #92048)

  • --table命令行选项未在非交互模式下生成适当的输出格式 。(漏洞#28511408)

  • 与命令一起使用的参数之前或之后的额外空格 \help现在被修剪。以前,额外空格的存在导致 MySQL Shell 无法找到相关的帮助主题。(漏洞 #28508724,漏洞 #92030)

  • 一些本机 MySQL Shell 对象未正确包装到 JavaScript 对象中,导致内存泄漏。内存处理机制已得到纠正。(漏洞#28473341)

  • 如果提供空字符串作为 MySQL Shell 命令行选项的参数,该命令行选项需要非空参数并且没有定义默认值,则 MySQL Shell 不会返回适当的错误。现在改进了命令行参数的错误处理,以便在这种情况下发出合适的错误并终止命令的执行。(缺陷号 28378553)

  • 如果用户在没有关闭 MySQL Shell 的情况下明确关闭了会话,则提示会继续显示已关闭会话的详细信息。(缺陷号 28314383)

  • 无法为 IPv6 地址标识的主机自动检索 MySQL Shell 存储的用户凭据。(漏洞#28261301)

  • MySQL Shell 现在将构建类型(商业版或社区版)显示为启动时和使用--help 参数时显示的产品版本信息的一部分。(漏洞#28242573)

  • 如果在没有关闭 MySQL Shell 的情况下断开 MySQL Shell 会话(例如,使用该 session.close()方法),则 SQL 模式下的后续查询不会返回“未连接”错误。MySQL Shell 现在不仅会检查全局会话对象是否存在,还会检查它是否与 MySQL 服务器实例建立了有效连接。(缺陷号 28240437)

  • 在 Windows 平台上,当使用Ctrl+L 清除终端时,MySQL Shell 窗口中的背景颜色未重置 。(缺陷 #28235701,缺陷 #91102)

  • 如果已经安装了等效的社区版软件包,则无法在 Debian 或 Ubuntu 上安装商业 MySQL Shell 软件包。(漏洞#28223781)

  • MySQL Shell 在内部使用了一些不推荐使用的函数和属性,这导致警告消息出现在 MySQL Shell 日志文件中,尽管用户没有执行这些函数。已弃用的函数和属性现已从内部代码中删除。(漏洞#28216558)

  • 如果为 MySQL Shell 选项指定了无效值,则 credentialStore.helperMySQL Shell 启动时产生的错误消息显示不正确。(漏洞#28216485)

  • MySQL Shell(操作)提供的升级检查器实用程序 util.checkForServerUpgrade()现在可以正确处理带有空格和其他空白字符的帐户名,并在使用该--skip-grants选项启动服务器时跳过权限检查。(漏洞 #28212899,漏洞 #91326)

  • 在 MySQL Shell 中使用 \history命令删除历史条目时,您现在可以使用格式指定要从历史尾部删除的历史条目数。对已删除条目的历史条目编号的处理已得到改进,以便在删除历史记录的尾部时,这些历史条目编号将重新用于新条目,并且没有间隙。如果命令清空历史记录,则历史记录条目的编号现在会像使用该命令时一样重置。此外,如果您指定要删除的历史记录条目的范围无效(使用格式 ),则发出的错误消息已得到改进。(漏洞 #28199513)\history delete -number\history delete\history clear\history delete firstnumber-lastnumber

  • 在 Windows 平台上,即使正在执行命令,在 MySQL Shell 中使用Ctrl+C组合键也会导致 MySQL Shell 关闭。(漏洞#27894642)

  • 用于识别给定 IP 地址是否为环回地址的 MySQL Shell 代码没有考虑用户已添加到环回接口的其他 IP 地址(除了 127.0.0.0/8 地址块)。现在检查分配给环回接口的所有 IP 地址。(漏洞 #27703779)

  • 以批处理模式运行 MySQL Shell 时,制表符分隔格式是输出的默认格式。在某些情况下,表格格式用于输出。此问题现已修复。--tabbed当 MySQL Shell 处于交互模式时,还添加了命令行选项以切换为制表符分隔格式进行输出,其中默认为表格格式。(漏洞 #27546082,漏洞 #89514)

  • MySQL Shell 连接现在支持 IPv6 地址中的区域 ID。区域标识符以百分比字符 (%) 作为分隔符附加到 IPv6 地址。例如:

    2001:0db8:3c4d:0015::1a2f:1a2b%14

    如果带有区域 ID 的 IPv6 地址作为 URI 类型字符串提供,则必须对百分比字符使用 URL 编码(百分比编码)。例如:

    mysqlsh --uri=user@[2001:0db8:3c4d:0015::1a2f:1a2b%2514]:33060
        shell.connect("user@[2001:0db8:3c4d:0015::1a2f:1a2b%2514]:33060")

    如果使用单独的参数或数据字典提供带有区域 ID 的 IPv6 地址,则不需要对百分号字符使用 URL 编码,并且可以按所示提供 IPv6 地址。例如:

    mysqlsh --user=user --host=2001:0db8:3c4d:0015::1a2f:1a2b%14 --port=33060

    请参阅使用类似 URI 的字符串或键值对连接到服务器。(漏洞 #27539702)

  • stderr通过在选项值前面加上 @(at 符号)输出 MySQL Shell 日志条目--log-level,并为 MySQL Shell 选择 JSON 输出格式时,某些日志条目未以 JSON 格式输出。记录器现在检查并使用 MySQL Shell 配置选项的当前值 outputFormat作为将日志条目写入 stderr. (漏洞#27480887)

  • 在 SQL 模式下,如果执行了未知命令,或者使用了多个连续的 SQL 语句分隔符,MySQL Shell 会错误地进入多行模式。现在,在这些情况下会返回适当的错误。(漏洞#27411526)

  • 在 Windows 平台上,当从 MySQL Shell 命令历史记录中访问一个长命令并在控制台窗口的右边缘进行编辑时,光标定位错误导致该命令向上移动一行并覆盖之前命令的输出。该问题现已解决。(缺陷号 27068352)

  • 重构了 MySQL Shell 中的结果打印机,以改进基于输出格式的二进制数据处理、多字节字符处理以及存在多行字符时表格格式的对齐。(错误#24912154,错误#24967872)