运行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。
创建集群管理用户后使用
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支持这样的连接,并添加了以下命令选项:
使用
——server-public-key-path
选项指定RSA公钥文件。使用
——get-server-public-key
选项从服务器请求公钥。
有关更多信息,请参见缓存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)