MySQL Shell发布说明/ MySQL Shell 8.0.14的更改(2019-01-21,一般可用性)

MySQL Shell 8.0.14变更(2019-01-21,一般可用性)

AdminAPI添加或更改功能

  • 集群.status ()操作已扩展,使您能够显示集群使用的基础组复制组的信息。现在您可以从集群的所有成员检索信息,而不必分别连接到每个成员。

    以查看有关groupName而且memberId;关于成员检查、提议和拒绝的交易数量的一般统计数据发布:

    Cluster.status({扩展:真})

    查看有关恢复和常规事务I/O的信息,应用程序工作线程统计信息和任何延迟;应用程序协调器统计信息,如果启用并行应用程序;错误,和其他信息从I/O和应用程序线程问题:

    Cluster.status ({queryMembers:真})

    此外,在以前的版本中,显示的uri类型字符串groupInformationSourceMember的输出集群.status ()可以是集群的MySQL路由器地址,而不是提供显示的组信息的实例的地址。这已得到改进,以确保groupInformationSourceMember总是显示正确的主机名,或report_host,价值和港口,或report_port,提供组信息的实例的值。(Bug #28636963, Bug #26519466, Bug #27824265, Bug #28366027)

  • AdminAPI不再依赖mysqlprovision check命令。这项工作的结果如下:

    • 错误字段返回的JSONdba.checkInstanceConfiguration ()已被删除,因为它仅用于保存mysqlprovision发出的错误。现在将直接报告任何错误,例如RuntimeError。

    • dba.verbose值不再影响显示的调试信息的数量dba.checkInstanceConfiguration ()dba.configureInstance (),dba.configureLocalInstance ()因为它只用于控制从mysqlprovision显示的信息的冗长程度。相反,使用MySQL Shell中的通用verbose值来控制这些函数的verbose级别。

    • 此外,返回的消息通常经过了改进,使它们更加准确。

    参考:参见:Bug #28737777, Bug #27305806, Bug #28768627, Bug #27702439, Bug #28733883。

  • 创建集群时,可以设置实例从集群中移除之前的超时时间,例如当它们变得不可访问时。传递新的expelTimeout选项。dba.createCluster ()操作,该操作配置group_replication_member_expel_timeout变量在种子实例上。所有运行MySQL server 8.0.13及以上版本的实例被添加到集群中,将自动配置为具有相同的属性group_replication_member_expel_timeout在种子实例上配置的值。

  • 当集群处于在线状态时,可以配置InnoDB集群的模式。这使您能够配置底层Group Replication组,以在单主模式下选择特定实例作为新的主,或者在多主模式和单主模式之间进行更改,而不使集群脱机。这使用了组协调器和添加的函数王# 10378,请参阅配置在线组.使用如下操作:

    • 集群.setPrimaryInstance (实例,这迫使选举实例作为新的初选,凌驾于任何选举程序之上。

    • 集群.switchToMultiPrimaryMode (),将集群切换到多主模式。所有实例都成为主实例。

    • 集群.switchToSinglePrimaryMode ([实例]),将集群切换到单主模式。如果实例时,它将成为主实例,而所有其他实例将成为辅助实例。如果实例如果不指定,则新的主实例是具有最高成员权重的实例(如果成员权重相同,则为最低UUID)。

  • 现在你可以在InnoDB集群实例在线时检查和修改设置。使用实例查看集群当前设置。

    • 集群.options (),其中列出了ReplicaSets和实例的集群配置选项。布尔选项所有还可以指定在输出中包含关于所有Group Replication系统变量的信息。

    这项工作还允许你在集群级或实例级配置InnoDB集群选项,同时实例保持在线。这避免了需要删除,重新配置,然后再次添加实例来更改InnoDB集群选项。使用如下操作:

    • 集群.setOption(选项,价值)全局修改所有集群实例的设置

    • 集群.setInstanceOption(实例,选项,值)修改单个集群实例的“设置”

    你使用InnoDB集群选项的方式取决于该选项是否可以在所有实例上更改为相同。这些选项在集群(所有实例)和每个实例级别都是可变的:

    • exitStateAction

    • memberWeight

    此选项仅在每个实例级别可更改:

    • 标签

    这些选项只能在集群级别更改:

    • failoverConsistency

    • expelTimeout

    • clusterName

  • 集群.rescan ()操作已扩展,使您能够检测集群拓扑的更改,并修改集群元数据,例如删除旧的实例数据。现在你可以:

    • 使用updateTopologyMode选项来检测元数据中注册的Group Replication模式(单主模式或多主模式)是否与集群的当前模式相匹配,如果通过新选项或提示确认请求,则更新元数据中的信息。方法后,可以使用此选项更新元数据集群.switchToSinglePrimaryMode ([实例])而且集群.switchToMultiPrimaryMode ()新增选项王# 12052

    • 使用addInstances选项指定要添加到元数据的新实例列表,或removeInstances选项,指定要从元数据中删除的过时实例列表。通过汽车值,以自动从元数据中添加或删除实例,而不必显式指定实例列表。这使得该函数即使在非交互模式下也可以更新元数据,使其与其他AdminAPI操作保持一致。

    • 此外,还添加了一个新的交互选项集群.rescan ()操作时,可启用或禁用交互模式提示符集群.rescan ()命令。

    参考:参见:Bug #28997465, Bug #28529362, Bug #28889563, Bug #25675665, Bug #28542904。

  • 在8.0.14中,组复制引入了指定故障转移保证(最终或读你写的东西)如果在单主模式下发生主故障转移(请参阅王# 11123).配置InnoDB集群在创建时的故障转移保证failoverConsistency选项。dba.createCluster ()操作,该操作配置group_replication_consistency种子实例上的系统变量。此选项定义了在单个主要组中选举新的主要时使用的新围栏机制的行为。隔离限制连接从新主服务器写入和读取,直到它应用了来自旧主服务器(有时称为读你写的东西).当fencing机制到位时,应用程序在应用任何backlog时,在短时间内实际上不会看到时间倒退。这确保了应用程序不会从新选出的主节点读取过时的信息。

    failoverConsistency选项仅在目标MySQL服务器版本为8.0.14或更高版本,并且实例添加到已配置了failoverConsistency选项自动配置为group_replication_consistency支持该选项的所有集群成员也一样。变量默认值由Group Replication控制,为最终,更改failoverConsistency选项BEFORE_ON_PRIMARY_FAILOVER启用fencing机制。或者使用failoverConsistency = 0最终而且failoverConsistency = 1BEFORE_ON_PRIMARY_FAILOVER

    请注意

    使用failoverConsistency选项对多主InnoDB集群没有影响,但被允许,因为集群稍后可以通过集群.switchToSinglePrimaryMode ()操作。

修复AdminAPI错误

  • 的默认值group_replication_exit_state_actionABORT_SERVER,但AdminAPI现在会覆盖这个,并将实例的默认值设置为READ_ONLY.这可以确保意外离开组的实例继续运行,并可以重新加入集群。(错误# 28701263)

  • 当在没有启用X插件的服务器上创建集群时,会对X协议端口值进行默认假设。现在,X协议端口的值只存储在启用了X插件的实例中。(错误# 27677227)

  • dba.checkInstanceConfiguration ()操作没有检查是否在目标实例上启用了性能模式。这可能会导致这样的情况:您可以创建一个集群,但不能在其上运行多个管理操作,例如集群.status ()操作。现在,dba.checkInstanceConfiguration ()检查实例上是否启用了性能模式。(错误# 25867733)

  • 集群.checkInstanceState ()在已经是当前集群成员的实例上执行时,输出表明该实例是完全可恢复的。这是一种误导,是由于缺少确保实例不属于集群的验证而导致的。(错误# 24942875)

  • dba.checkInstanceConfiguration ()当权限通过角色(在MySQL server 8.0及更高版本中可用)关联到用户时,操作无法识别权限。在这种情况下,尽管用户拥有所有必需的特权,但仍然错误地发出了丢失特权错误。现在AdminAPI操作可以正确地识别具有角色分配的权限的用户。(Bug #91394, Bug #28236922)

添加或更改的功能

  • X DevAPI:表格而且集合对象现在支持.count ()方法,X DevAPI的一部分。

  • 当从命令行启动时,MySQL Shell打印关于产品的信息、关于会话的信息(例如默认模式和连接ID)、警告消息以及在启动和连接期间返回的任何错误。属性可以禁止打印不需要的信息——低调(= 1 | 2)mysqlsh命令行选项。如果值为1(指定该选项时为默认值),则不会打印关于MySQL Shell产品的信息,但会打印会话信息、警告和错误。如果值为2,则只打印错误。

    作为这项工作的一部分,打印的信息被整理,以便在关于会话的信息之前打印关于MySQL Shell产品的信息。此外,将错误打印的处理规范化,以将诊断数据发送到stderr,和错误stdout.(Bug #28833718, Bug #28855291)

  • 使用经典MySQL协议的MySQL Shell连接现在支持压缩客户端和服务器之间发送的信息。您可以在启动MySQL Shell并使用命令行选项连接时指定压缩,或者在使用其他接口创建会话时在URI字符串或键值对中指定压缩。您也可以使用MySQL Shell配置选项defaultCompress为每个全局会话启用压缩。

    对于使用Unix套接字文件的MySQL Shell连接——套接字现在可以不带参数地指定命令行选项,使用协议的默认Unix套接字文件进行连接。(错误# 28730149)

  • MySQL Shell JSON导入实用程序现在可以处理JSON文档中表示的BSON(二进制JSON)数据类型。BSON文档中使用的数据类型并不全部由JSON支持,但可以使用JSON格式的扩展来表示。导入实用程序可以处理使用JSON扩展表示BSON数据类型的文档,将它们转换为相同或兼容的MySQL表示,并使用该表示导入数据值。转换后的数据值可用于表达式和索引,并可由SQL语句和X DevAPI函数操作。

    要以这种方式将BSON类型的JSON扩展转换为MySQL类型,必须指定convertBsonTypes选项。还可以使用其他选项来控制特定BSON数据类型的映射和转换。如果您为BSON类型导入带有JSON扩展的文档,并且不使用此选项,则导入文档的方式与在输入文件中表示的方式相同。

  • 一个MySQL Shell配置选项showColumnTypeInfo和命令行选项——column-type-info已添加以显示返回结果集中每个列的元数据,例如列类型和排序规则。元数据在结果集之前打印,并且仅以SQL模式显示。

    在元数据中,列类型返回为MySQL Shell (类型),以及原始数据库使用的类型(DBType).对于使用经典MySQL协议的MySQL Shell连接,DBType是协议返回的,对于X协议连接,DBType是从现有信息推断出来的。列长度(长度)以字节为单位返回。

  • 由MySQL Shell提供的升级检查工具,它是checkForServerUpgrade ()的功能跑龙套全局对象,有以下几个增强:

    • 该实用程序现在可以选择并提供相关检查的建议和说明,这些检查不能自动执行,必须手动执行。手动检查被评为警告或通知(信息)级别,并在自动检查之后列出。在MySQL Shell 8.0.14中,该实用程序提供了有关MySQL 8.0中默认身份验证插件更改的建议。

    • 已为被移除对象添加检查log_syslog_ *以前将错误日志配置到系统日志的系统变量(Windows上的事件日志和syslog在Unix和类Unix系统上)。

    • 添加了针对特定模式不一致的检查,这些模式不一致可能是由文件的删除或损坏引起的,包括删除模式的目录和删除.frm文件获取一个表。

    您可以从MySQL Shell中访问升级检查工具,也可以从命令行启动它。有关说明和进一步信息,请参见MySQL Shell实用程序

  • MySQL Shell可以以表格、选项卡或垂直格式打印结果,也可以作为漂亮的或原始的JSON输出。从MySQL Shell 8.0.14,新的MySQL Shell配置选项resultFormat可用于为所有会话或仅为当前会话指定这些输出格式中的任何一种作为持久默认值。修改后立即生效。或者,新的命令行选项——result-format可在启动时用于指定会话的输出格式。现有的命令行选项——表——选项卡,——垂直现在的别名是——result-format带有相应值的选项。

    现有的命令行选项——json控制会话中所有MySQL Shell输出的JSON包装。指定——json——json =漂亮打开JSON包装并生成漂亮打印的JSON。指定——json =生打开JSON包装并生成原始JSON。的值resultFormatMySQL Shell配置选项被忽略。指定——json =了或者不指定——json选项关闭JSON包装,结果集将按指定的格式正常输出resultFormat配置选项。

    outputFormatMySQL Shell配置选项现在已弃用。这个选项结合了JSON包装和结果打印功能,现在这两个功能已经分开了。如果这个选项仍然在你的MySQL Shell配置文件或脚本中指定,行为如下:

    • jsonjson /生值,outputFormat分别使用漂亮或原始JSON激活JSON包装。

    • 表格选项卡,或垂直值,outputFormat关闭JSON包装并设置resultFormatMySQL Shell配置选项为会话的适当值。

  • MySQL Shell使用的V8库已经更新到6.7.288.46版本。

错误修复

  • MySQL Shell的TAR版本是Python 2.7附带的。尝试包含站点包时,由于缺少包含所需的构建文件而发出错误。(错误# 28973138)

  • 对MySQL Shell中用户提供数据的处理过程进行了重构,以确保在使用后正确清理。(错误# 28915716)

  • MySQL Shell函数为参数错误返回的异常类型和错误消息已经在不同的函数之间标准化了。(错误# 28838958)

  • MySQL Shell异常停止shell.setCurrentSchema ()方法在建立活动会话之前设置默认模式。MySQL Shell现在在操作发生时验证是否存在活动会话。(错误# 28814112)

  • 如果没有导入选项,MySQL Shell JSON导入实用程序不再需要提供空字典。(错误# 28768585)

  • 在SQL模式下,MySQL Shell不会将包含字符串的语句添加到历史记录中确认密码属性配置的其他字符串——histignore命令选项或shell.options(“history.sql.ignorePattern”).然而,这在以前意味着过滤掉的语句不能在输入后立即更正,如果出现任何错误,必须重新输入。MySQL Shell现在总是让最后执行的语句可以通过按向上箭头来回收,而不管历史忽略列表中设置的过滤器是什么。如果过滤适用于最后执行的语句,那么一旦输入另一条语句,或者如果您在执行语句后立即退出MySQL Shell,它就会从历史记录中删除。(错误# 28749037)

  • MySQL Shell中的结果打印逻辑已被重构,以使用后端而不是高级结果数据,为所有类型的结果数据提供性能改进,并为JSON数据提供更准确的表示。(错误# 28710831)

  • 修复了使用新的MySQL Shell命令行语法时发生的内存泄漏。(错误# 28705373)

  • 在MySQL Shell提供的升级检查工具中检查共享表空间中的分区表util.checkForServerUpgrade ()操作)没有为8.0.11和8.0.12目标版本返回正确的结果。检查现在使用替代的Information Schema表,这些表在这些版本中填充了所需的信息。(错误# 28701423)

  • MySQL Shell命令\选项忽略在初始值之后为某个选项指定的用空格分隔的其他参数。(错误# 28658632)

  • MySQL Shell允许将密码中的换行符(换行和回车)传递给Secret Store Helpershell.storeCredential方法,导致秘密存储助手中出现错误。MySQL Shell现在返回一个异常,如果在提供的密码中使用换行符shell.storeCredential方法,并且不将它们传递给秘密存储助手。(错误# 28597766)

  • 在Windows平台上,使用UTF-8编码的字符串打印到控制台cout对象,每次传输一个字节。这将导致多字节Unicode字符(例如单引号)被错误地显示和处理。MySQL Shell现在使用替代函数进行打印,并验证多字节UTF-8字符是否作为一个完整的单元发出。(错误# 28596692)

  • 在MySQL Shell中执行SQL脚本时,脚本中语法错误的位置报告了不准确的行号。该数字引用当前SQL块,而不是脚本中的行号。错误消息现在使用全局行号。(错误# 28545982)

  • MySQL Shell中的SQL语句分割逻辑已被重构,以修复一些问题并匹配MySQL命令行工具的行为mysql

    • 反斜杠字符()在分隔符字符串中不再接受。

    • 这个词的用法分隔符在上下文中,命令现在被正确处理。

    • 在脚本中,注释不会被丢弃,注释和语句组现在以相同的方式分割mysql会分裂他们。

    • 大型脚本现在可以成功地分割成增量块,即使某些令牌跨越了多个块。

    • 脚本现在可以在ANSI_QUOTESSQL模式。

    • 现在可以正确解析包含引号的多行字符串和注释。

    • 内联命令的处理方式与by相同mysql,详情如下:

      • 一个出现在语句开头的字符被解释为一个多字母MySQL Shell命令的开头。

      • 一个出现在语句中的字符被解释为单字母命令的开头。命令立即执行,然后从输入语句中删除。

      • 一个出现在语句结束后的字符被解释为单字母命令的开始。

    (Bug #27959016, Bug #25689071)

  • MySQL Shell对Windows命名管道连接的处理得到了改进和系统化。现在,如果在Windows上将主机名指定为句点(.),MySQL Shell将使用命名管道进行连接。

    • 如果使用URI类型字符串进行连接,请指定user@。

    • 如果使用数据字典进行连接,请指定{“主机”:“。"}

    • 如果使用个别参数进行连接,请指定——主机=。- h。

    默认情况下,管道名MySQL使用。方法指定另一个命名管道——套接字选项或作为URI类型字符串的一部分。如果使用URI类型字符串,则命名管道必须以字符作为前缀\ \ \。也可以使用百分比编码或用括号括起来,如下面的例子所示:

    (\ \ \命名:管)\ \ \ % 3 apipe命名

    (错误# 27381738)

  • 当为MySQL Shell启用JSON格式输出时,Shell API Options类的属性(shell.options)和AdminAPI集群类(dba.getCluster)没有打印,只打印了类名。(错误# 25027181)