- 
命令行选项 --classic、--node、--sqln和--ssl被声明为已弃用,但实际上已被删除。MySQL Shell 现在再次处理这些选项,但在使用它们时会打印一条警告消息。弃用的选项作为它们的替换选项进行处理,如下所示:- --classic被处理为- --mysql
- --node被处理为- --mysqlx
- --sqln被处理为- --sqlx
- --ssl被处理为- --ssl-mode
 (漏洞 #27012385) 
- 
当您创建集群或添加实例时,您现在可以覆盖默认组名、本地地址和组种子。这使得自定义集群变得更加容易。 dba.createCluster()和cluster.addInstance()命令 中添加了以下选项:- 使用 - groupNamewith- dba.createCluster()设置集群的名称
- 用于 - localAddress设置实例提供的与其他实例通信的地址
- 用于 - groupSeeds设置实例加入集群时用作种子的实例
 有关更多信息,请参阅 自定义 InnoDB 集群成员服务器。(错误#26485254,错误#26838005) 
- 
与 InnoDB 集群的连接已得到简化。现在,当您发出 dba.getCluster()并且活动 Shell 会话不是与主服务器的连接时,将查询集群以获取主服务器信息并自动打开与主服务器的连接。这确保可以将配置更改写入元数据。作为此改进的一部分,您现在可以使用已添加的以下选项配置 MySQL Shell 连接到 InnoDB 集群的类型:此外还进行了以下更改: - 该 - dba.resetSession()方法已被删除。
- 对象中添加了一个新 - disconnect()方法- cluster,该方法关闭集群打开的所有内部会话。InnoDB Cluster 对断开连接的集群对象的操作会导致错误。
- 该 - Cluster.status()方法的输出现在包含该- groupInformationSourceMember字段,该字段显示集群对象用于获取有关集群的信息的内部连接的 URI。
 参考资料:另请参阅:Bug #25091586。 
- 除非会话帐户存在,否则帐户验证无法正常工作。现在,验证是使用服务器验证过的帐户完成的。(漏洞#26979375) 
- MySQL Shell 中用于处理 InnoDB 集群的 AdminAPI 仅支持与服务器实例的 TCP 连接。AdminAPI 现在会在开始需要访问数据库的操作之前检查 TCP 连接是否正在使用,而不是尝试使用其他连接类型进行操作但未成功。(缺陷号 26970629) 
- 如果您 - STOP GROUP REPLICATION在属于集群的实例上发布,则尝试将该实例重新加入集群失败,因为使用了错误的组复制种子。现在, 基于 集群中所有当前活动实例的- Cluster.rejoinInstance()正确设置 。(漏洞#26861636)- group_replication_group_seeds- group_replication_local_address
- 有时 - dba.addInstance()命令失败并出现错误,表明服务器- RECOVERING尽管处于状态但仍处于状态- ONLINE。此修复可确保返回正确的实例状态。(漏洞#26834542)
- 如果运行 MySQL Shell 的用户对 AdminAPI 配置的选项文件没有写权限,则不会显示错误。(缺陷号 26830224) 
- 添加 WL#10470后,默认值 - server_id已更改为 1。由于每个实例的服务器 ID 必须是唯一的,这导致 AdminAPI 出现问题。现在,具有的服务器实例- server_id=1被正确识别为未正确配置以供 InnoDB 集群使用。(漏洞#26818744)
- 除了 Python 2.7 之外,AdminAPI 现在还支持 Python 2.6,无需在 Oracle Linux 6 上手动安装。(缺陷号 26809748) 
- 使用 从集群中删除实例后 - Cluster.removeInstance(),该实例在重新启动后静默重新加入 Group Replication 组。发生这种情况是因为 默认情况下- group_replication_start_on_boot设置为- ON。现在,对于运行 MySQL 8.0.4 及更高版本的实例,选项文件中的修复设置- group_replication_start_on_boot为- OFF。对于运行 MySQL 8.0.4 之前版本的实例,会发出警告,告诉您手动编辑- group_replication_start_on_boot实例的选项文件以避免该问题。(漏洞#26796118)
- 由于使用的是 Python 版本,在需要 SSL 的 Windows 上使用 AdminAPI 命令会导致错误。(漏洞#26636911) 
- adoptFromGR通过将选项与命令一起 使用,从现有组复制部署创建 InnoDB 集群- dba.createCluster()将失败,并出现错误,指出该实例已经是复制组的一部分。该问题仅出现在 MySQL Shell 默认向导模式中。该修复确保- dba.createCluster()命令的交互层允许使用该- adoptFromGR选项。(漏洞#26485316)
- 创建和添加沙箱实例时生成的警告已得到改进。(缺陷号 26393614) 
- 使用具有 的实例时 - require_secure_transport=ON,需要连接到实例的 AdminAPI 命令失败。(缺陷号 26248116)
- 该 - Cluster.dissolve()命令试图停止在元数据中注册的所有实例上的组复制,如果这些实例中的任何一个不可联系,换句话说,状态将导致连接错误- (MISSING)。- ONLINE该修复程序确保仅停止可以联系的实例,换句话说,与 state 联系的实例 。(漏洞 #26001653)
- 使用适当的 AdminAPI 操作将实例添加到 InnoDB Cluster 时,会执行检查以验证任何现有表的兼容性。如果检测到不兼容的表(例如使用 - MyISAM),则会发出错误。但是,错误消息指的是 AdminAPI 操作不可用的选项:- --allow-non-compatible-tables。(缺陷号 25966731)
- 该 - cluster.rejoinInstance()命令尝试重新加入一个实例,即使该实例已经是集群的一部分。现在,只- MISSING接受状态中的 实例- cluster.rejoinInstance()。尝试重新加入处于任何其他状态的实例失败并出现错误。(漏洞 #87873,漏洞 #26870329)
- 在 Unix 上,如果安装了 Python 3,则 AdminAPI 命令失败。(错误#87731,错误#26785584) 
- 使用 - dba.checkInstanceConfiguration()and- dba.configurelocalinstance()命令时,如果它有足够的权限来实际执行命令,则不会检查正在使用的帐户。此修复可确保该帐户在继续之前具有所需的权限。这还需要更改授予- clusterAdmin用户的权限。(漏洞 #87300,漏洞 #26609909)
- X DevAPI:功能中添加了 一个新 - patch()操作- modify(),使您能够通过合并一组更改来修改文档。有关详细信息,请参阅- JSON_MERGE_PATCH()。
- X DevAPI: MySQL Shell文档 - _id时没有指定集合添加操作时自动生成- _id自动生成的 _id 是使用 UUID() 函数创建的。现在,使用的令牌的顺序已从 MAC 地址- aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee所在 。- eeeeeeeeeeee- eeeeeeeeeeee-dddd-cccc-bbbb-aaaaaaaa
- X DevAPI: 由 X DevAPI 使用 - mysql.getClassicSession(connection_data)or- mysqlx.getSession(connection_data)现在- ssl-mode=REQUIRED用作默认值,如果没有- ssl-mode提供,则既不- ssl-ca也不- ssl-capath提供。如果没有- ssl-mode提供并且提供了任何- ssl-ca或- ssl-capath,则由 MySQL Shell 创建的所有会话现在默认为- ssl-mode=VERIFY_CA.
- 
X DevAPI: 除了通过匹配过滤器对集合中的文档起作用的现有 CRUD 命令之外,还添加了以下操作,使您能够处理单个文档: - Collection.replaceOne(string id, Document doc)- id如果存在,则用提供 的文件更新(或替换)标识的文件。
- Collection.addOrReplaceOne(string id, Document doc)添加给定的文档。如果该- id字段或任何其他具有唯一索引的字段已存在于集合中,则操作会更新匹配的文档。
- Document Collection.getOne(string id)返回给定的文档- id。这是 . 的快捷方式- Collection.find("_id = :id").bind("id", id).execute().fetchOne()。
- Result Collection.removeOne(string id)删除给定的文档- id。这是一个捷径- Collection.remove("_id = :id").bind("id", id).execute().
 使用这些操作,您可以按 ID 引用文档,通过遵循加载、修改和保存模式,使对单个文档的操作更简单,例如: doc = collection.getOne(id); doc["address"] = "123 Long Street"; collection.replaceOne(id, doc);
- 
X DevAPI: 您现在可以在 MySQL Shell 会话中使用保存点。对象中添加了以下方法 Session:- 用于 - setSavepoint()生成保存点。服务器执行- SAVEPOINTSQL 语句并返回生成的保存点名称。
- 用于 - setSavepoint(name)指定- SAVEPOINTSQL 语句使用的名称。
- 用于 - releaseSavepoint(name)执行- RELEASESQL 语句。
- 用于 - rollbackTo(name)执行- ROLLBACK TO nameSQL 语句。
 检查传递给这些函数的任何名称以确保该名称不为 null 或空字符串。 ''不允许使用、""、 等名称``,即使服务器允许这些名称也是如此。有关详细信息,请参阅 SAVEPOINT、ROLLBACK TO SAVEPOINT 和 RELEASE SAVEPOINT 语句。
- X DevAPI: X DevAPI 现在支持对表和集合进行 CRUD 操作的行锁定。使用 - lockShared()写锁的- lockExclusive()方法和读锁的方法,已经添加到- find()和- select()中。任一方法都可以以任意组合调用任意次数,包括不调用。但是要使用的锁定类型总是最后一个被调用的。调用锁定方法后,您只能执行操作,调用- execute()or- bind()。有关详细信息,请参阅 InnoDB 锁定。
- 
X DevAPI: X DevAPI 删除操作已得到改进。现在,这些 drop()方法与方法处于同一级别create(),它们都没有返回任何内容。现在不需要使用execute()after drop 方法。如果在数据库中不再存在的对象上调用 drop 方法,现在不会出现错误。这会修改 Session对象,以便:- dropSchema()什么都不返回
- dropTable(String schema, String name)已移除
- dropCollection(String schema, String name)已移除
- dropView(String schema, String name)已移除
 这会修改 Schema 对象,以便: - 没有 - dropCollection(String name)添加 任何内容
 这会修改 Collection 对象,以便: - dropIndex(String name)是直接操作,意义- .execute()不再需要
- dropIndex(String name)什么都不返回
 
- 
X DevAPI: mysql与实例的 SQL 连接的经典会话一起使用 的这导致了以下变化:- 新 - getSession()功能已添加到- mysql创建经典会话的模块中。此功能的工作方式与现有- mysql.getClassicSession()功能相同。
- 
的 runSql()方法ClassicSession已扩展为获取参数列表以替换为查询中的占位符。例如,现在您可以发出:session.runSql("select * from tbl where name = ? and age > ?", ["Joe", "20"])此外, query()还添加了一个函数ClassicSession作为 的别名runSql(),使其与Session.query().
- 
已从 中删除以下功能 ClassicSession:- createSchema()
- getSchema()
- getDefaultSchema()
- getCurrentSchema()
- setCurrentSchema()
- ClassicSchema()
 
- 该 - ClassicTable对象已被删除。
- 
以下 Table和 View DDL 函数已从Schema对象中删除:- dropTable()
- dropView()
 
- 全局 - db变量的行为已被修改。当创建全局连接并且连接数据包含默认架构时,全局- db变量将设置为相应的- Schema对象。现在,对于通过经典 MySQL 协议的连接,例如- ClassicSession.
 
- 
MySQL Shell 现在支持通过按 Tab 键自动完成光标前的文本。自动完成适用于: - 内置 MySQL Shell 命令,例如键入 - \con后按 Tab 键完成到- \connect.
- SQL、JavaScript 和 Python 语言关键字取决于当前的 MySQL Shell 模式。 
- 基于当前默认模式的 SQL 模式下的表名、列名和活动模式名。 
 可以使用以下命令选项配置自动完成: 
- 您现在可以使用 Unix 套接字进行 X 协议连接。URI 类型字符串中的套接字文件路径应该是百分比编码的,例如 - root@/home%2Fuser%2Fmysql-sandboxes%2F3310%2Fsandboxdata%2Fmysqlx.sock,或者用括号括起来,例如- root@(/home/user/mysql-sandboxes/3310/sandboxdata/mysqlx.sock). 该- --socket选项不能与- --port选项组合。请参阅使用类似 URI 的字符串或键值对连接到服务器。
- 
用于 util.checkForServerUpgrade([uri])检查服务器是否可以从当前运行的版本升级到下一个主要系列版本。例如,您可以验证运行 MySQL 5.7 的服务器实例是否满足 MySQL 8.0 的升级先决条件,请参阅 准备安装以进行升级。要验证 URI 类型字符串中的服务器实例,例如user@example.com:3306问题:util.checkForServerUpgrade(['user@example.com:3306'])MySQL Shell 提供有关表空间中任何在将实例升级到 MySQL 8.0 时会导致问题的报告。 
- MySQL Shell 针对 MySQL 服务器版本 8.0.4 和 OpenSSL 构建。 
- 
MySQL 8.0.4 caching_sha2_password默认使用身份验证插件和加密连接。这意味着在 MySQL 中创建的任何新帐户都使用这些功能。如果在启用加密连接的情况下建立连接,则新的身份验证方法是完全透明的,这是默认的首选连接模式。如果明确禁用加密连接,则适用以下限制:- X 协议会话需要加密连接。 
- 如果 caching_sha2_password 插件报告诸如 Authentication requires a secure connection之类的错误,则无法使用 MySQL Shell 连接到该帐户,直到建立加密连接或使用mysql客户端清除错误。 
 请参阅使用加密连接和 缓存 SHA-2 可插入身份验证。 
- 在使用过期或临时密码时,在未指定端口或套接字的情况下尝试服务器连接失败,并出现需要重置密码的错误。默认连接数据现在设置在连接处理的适当位置,因此连接成功。(漏洞#27266648) 
- MySQL Shell 需要选项名称 - ssl-ciphers而不是标准 MySQL 选项名称- --ssl-cipher来指定用于连接加密的允许密码列表。- --ssl-cipherMySQL Shell 现在需要标准选项名称 。(漏洞 #27185275)
- 该 - --show-warnings选项在 MySQL Shell 中不起作用。(漏洞 #27036716)
- 使用 Unix 套接字进行连接时的输出 - \status显示相对路径。现在显示了套接字的绝对路径。(漏洞 #26983193)
- MySQL Shell 现在在以批处理模式调用时以及以交互模式使用时 自动预加载内置 模块 - mysql和API 模块。- mysqlx(缺陷号 26174373)
- 
MySQL Shell 的用户配置路径默认为 %AppData%\MySQL\mysqlsh\Windows 和~/.mysqlsh/Unix。此目录用于 MySQL Shell 历史文件 (history)、日志文件 (mysqlsh.log) 和主题文件 (prompt.json)。它也是 MySQL Shell 搜索启动脚本(mysqlshrc.js或mysqlshrc.py)的最终位置。MYSQLSH_USER_CONFIG_HOME您现在可以通过使用环境变量 指定替代路径来覆盖用户配置路径 。MySQL Shell 使用该环境变量指定的目录来代替%AppData%\MySQL\mysqlsh\Windows 和~/.mysqlsh/Unix 上的用户配置数据。(漏洞 #26025157)
- 对于文件处理,MySQL Shell 现在将文件路径中的前导波浪号扩展到适当的主目录。MySQL Shell 使用相关的环境变量识别主目录,或查找登录用户。(缺陷号 25676405) 
- MySQL Shell 现在 - program_name在连接时为服务器提供一个连接属性,值为- mysqlsh. 连接属性显示在性能模式连接属性表中。(缺陷 #24735491,缺陷 #82771)
- 以 Python 模式在 MySQL Shell 中运行 - help()导致 AttributeError。(漏洞 #24554329,漏洞 #82767)
- 
数组和对象现在接受 IN运算符。例如:collection.find("'Fred' IN username")