MySQL Shell版本说明/ MySQL Shell 8.0.11的更改(2018-04-19,通用可用性)

MySQL Shell 8.0.11的更改(2018-04-19,通用可用性)

AdminAPI添加或更改功能

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

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

    作为该功能的一部分,我们做了以下改进:

    • 改进的消息显示。

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

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

    • 替换了实例发布后的自动配置dba.createCluster而且dba.addInstance通过配置检查dba.checkInstance (),如果检查失败,则中止该命令。

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

    参考文献:参见Bug #27608299, Bug #27112727, Bug #27629803。

AdminAPI bug修复

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

  • 由Bug#27545850引入的更改意味着现在不可能在插件启动或停止时修改Group Replication相关选项。AdminAPI操作已被修改,以确保它们尊重此更改,并且试图在插件启动时发出更改Group Replication操作的语句将导致错误。没有检查插件何时停止,所以你应该确保如果插件有可能停止,你不会尝试配置一个实例。(错误# 27545850)

  • 当实例重新加入集群时,显示的输出得到了改进。(错误# 27437389)

  • dba.createCluster ()函数在实例上使用时失败innodb_page_size = 4 k,因为instance_name在InnoDB集群元数据中的实例表的列使用VARCHAR大小为256,对于innodb_page_size = 4 k.但是,此列的大小不能更改,因为它用于保存长度可达255字节的集群成员的主机名。现在在使用时验证此限制dba.createCluster ()dba.checkInstanceConfiguration ()dba.configureInstance (),dba.configureLocalInstance ().(错误# 27329079)

  • 当使用路径中包含非ascii字符的沙盒目录时,管理沙盒的AdminAPI命令失败了,并出现错误。类的子目录时,当用户名具有非ascii字符时就会发生这种情况$ HOME% userprofile %路径,通常基于当前用户名。该修复将Unicode支持添加到AdminAPI使用的内部供应工具中。(错误# 27181177)

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

  • 所有需要连接的AdminAPI命令的在线帮助显示了连接数据的详细信息,这打乱了每个命令的详细信息。现在,帮助显示了连接详细信息的概述和关于从哪里获得更多帮助的信息。(错误# 27146290)

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

  • Cluster.forceQuorumUsingPartitionOf ()操作对非根用户不起作用,即使该用户拥有所有必需的特权。该修复确保使用指定的用户连接到所有实例,而不是根用户。(错误# 27089930)

  • 发行dba.createCluster ()在交互模式中,由于用户没有所有所需的特权,导致意外停止。发出时生成的错误消息dba.configureLocalInstance ()而且dba.checkInstanceConfiguration ()如果正在使用的帐户没有所需的特权也得到了改进。(Bug #27076753, Bug #27324699)

  • 当使用adoptFromGR将一个Group Replication Group转换为一个InnoDB Cluster,输出建议添加实例。这条消息现在已经得到了改进,显示已经添加了实例。(错误# 27061615)

  • 在交互模式下,cluster.removeInstance ()AdminAPI函数不接受选项字典中的第二个参数。这就阻止了选项,该选项失败并出现错误。(错误# 26986141)

    参考文献:参见Bug #27572618。

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

  • 在建立集群时,创建一个复制用户以支持分布式恢复。如果启用了MySQL Shell日志记录,则创建用户没有正确地将语句添加到日志中。(错误# 26938488)

  • dba.checkInstanceConfiguration ()而且dba.configureLocalInstance ()操作没有正确报告与实例的不正确配置相关的任何错误server_id.现在,当一个错误被报告时,它会显示在不满足InnoDB集群要求的变量列表中。

    此外,X Plugin负载已从my.cnf它是由AdminAPI为运行MySQL 8.0.11及更高版本的沙箱实例创建的,因为这些版本默认安装了X Plugin。(错误# 26836230)

  • 当使用dba.configureLocalInstance ()clusterAdmin选项创建一个可以管理集群的用户,创建的帐户有太多的权限。(错误# 26737608)

  • 创建集群并向其中添加实例时,会创建内部用户,当实例加入集群时,Group Replication需要这些用户进行分布式恢复。在将这些自动生成的复制用户从集群中删除或解散集群后,没有从实例中删除这些复制用户。(错误# 26395608)

  • 如果一个实例包含InnoDB集群元数据,但它是独立的,换句话说,它不属于集群,它是不可能使用的dba.dropMetadataSchema ().(错误# 26315635)

  • 如果你发布了dba.configureLocalInstance ()针对一个实例,该实例对于InnoDB集群使用是有效的,并指定myCnf选项,但my.cnf文件不可读,操作将打印出需要修复的问题。现在当你设置myCnf选项,使用dba.configureInstance ()而且dba.configureLocalInstance (),操作人员只在必要时使用。换句话说,如果目标实例对InnoDB集群的使用无效,必须更改设置。(错误# 25702994)

  • cluster.describe ()而且cluster.status ()AdminAPI方法返回包含相同信息的JSON对象,但有些字段由不同的标记标识。为使标记一致,返回的对象cluster.describe ()已经改变了实例已被替换为拓扑结构,宿主地址.(错误# 25247515)

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

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

  • 尝试将两个具有相同标签的不同实例正确地添加到一个InnoDB集群中,结果出现错误,但是具有重复标签的实例保留了部分初始化的配置。(错误# 24761416)

增加或更改的功能

  • 重要的变化;微软的Windows操作系统:在安装MySQL Shell之前,确保您有Visual c++ Redistributable for Visual Studio 2015(可在微软下载中心)安装在你的视窗系统上。这现在适用于MySQL Shell的社区和商业版本。

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

    现在,如果您在运行8.0.11以前版本的MySQL的服务器上向集合添加文档,您必须手动包含一个文档ID,因为这些版本不会自动添加ID。

  • X DevAPI:支持NOWAIT而且跳过锁InnoDB锁定模式已添加到锁定操作中。现在您可以使用这些锁定模式lockShared ()而且lockExclusive ()方法,例如:

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

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

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

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

    在哪里LockContention可以是:

    • 默认的如果函数遇到行锁,它会一直等待直到没有锁

    • NOWAIT如果函数遇到行锁,它将中止并生成一个ER_LOCK_NOWAIT错误

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

    有关更多信息,请参见锁定读并发,NOWAIT和SKIP锁定

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

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

    重要的

    如果不使用加密连接,请通过X协议与使用caching_sha2_password认证插件,用户的密码必须存储在缓存中。如果不使用加密连接,目前没有办法通过X协议存储密码。

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

    有关更多信息,请参见缓存SHA-2可插入认证

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

    shell.options。set_persist shell.options (optionName、价值)。unset_persist (optionName值)

    此外,新的defaultMode选项,它允许您配置MySQL Shell启动时使用的编程语言。可以使用命令选项覆盖默认模式。

  • util.checkForServerUpgrade ((uri))检查工作已扩展至检查以下不兼容的功能:

    • 过时了sql_mode

    • 共享表空间中的分区表

    • 删除功能

错误修复

  • X DevAPI:修正了X DevAPI对SQL通配符的处理Schema.getTable ()Schema.getCollection ()而且Session.getSchema ()功能。(错误# 26392984)

  • \辞职命令退出MySQL Shell时,此事件会在错误日志中记录为连接中断。这个问题现在已经解决了。(Bug #27821045, Bug #90281)

  • 当MySQL Shell命令行选项——json =生时,输出实际上以很好的打印格式提供,并显示空字符串代替错误消息。这些问题现在已经得到了纠正。(Bug #27733996, Bug #26737357)

  • 当从脚本执行MySQL Shell命令时,无法使用交互式的密码和确认提示。现在,在脚本中使用命令时,默认启用交互提示,在命令行中使用命令时也是如此。的——no-wizard命令行选项禁用MySQL Shell命令的交互式提示。(错误# 27702250)

  • util.checkForServerUpgrade ()如果命令中没有提供所需的密码,Operation现在会交互式地提示用户输入密码。如果——no-wizard选项已用于禁用连接向导,缺少凭据反而会导致错误,并且不会执行函数。(错误# 27514395)

  • util.checkForServerUpgrade ()操作为传递给函数的用户要求了错误的特权。用户现在需要所有特权,而不要求GRANT选项特权。(错误# 27506702)

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

  • 默认情况下,MySQL Shell连接假定需要密码,在登录提示时请求密码。新的MySQL Shell命令行选项——没密码提供用于显式指定不使用密码,并禁用密码提示。的——没密码option可以在使用套接字对等凭据身份验证(对于Unix套接字连接)或用户拥有无密码帐户的任何身份验证方法时使用(但注意这种情况是不安全的,不建议使用)。

    MySQL Shell先前提供的用于指定连接不使用密码的方法仍然有效,可以用来代替——没密码选择。这些方法如下:

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

    • 如果使用单独的参数进行连接,请指定——密码=选项,其值为空。

    (错误# 26986360)

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

  • 已添加对微秒的支持mysqlx.dateValue ()函数和日期对象。(错误# 26429497)

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

  • db全局对象对于SQL模式下的连接不可用。方法返回的消息中已删除此引用\连接在那种情况下指挥。(错误# 26428665)

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

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

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

  • 当与服务器的连接丢失时,MySQL Shell不再尝试自动重新连接。新的MySQL Shell命令\连接,这将使MySQL Shell使用现有的连接参数对当前全局会话尝试多次重连接尝试。如果这些尝试都不成功,您可以使用\连接命令,并指定连接参数。(错误# 25105307)

  • 修复了在MySQL Shell启动并连接到MySQL服务器时发生的内存泄漏,然后用户退出MySQL Shell而不执行任何命令。(错误# 24794589)