作者:Alfredo Kojima 编译:徐轶韬
MySQL Shell 8.0.22刚刚发布,现在可以下载。
除了发行说明中描述的错误修复和较小更改外,还包括一些更重要的增强功能。
转储和加载实用程序
importTable:自定义数据转换
importTable
实用程序现在支持将导入的数据进行任意数据转换。可以在decodeColumns
选项中指定任意SQL表达式,该选项由MySQL服务器针对每个加载的行进行转换。
该功能允许在导入或迁移表时对数据进行转换,规范化和/或重新规范化,以及将简单的Extract-Transform-Load工作流程实现为MySQL Shell脚本。
exportTable
添加了一个新实用程序exportTable与importTable
配合使用
。它可以用于从单个表中以几种不同格式导出行数据,包括CSV、TSV、JSON等。与importTable一样,数据可以存储在本地文件以及OCI对象存储中。
dumpTables
添加了一个新实用程序dumpTables,用于转储单个表及其DDL。支持dumpInstance和dumpSchemas的大多数选项同样适用于dumpTables
。另外,可以将dumpTables创建的转储加载到不同名称的模式中。
改进了转储和加载过程中的分块
修复了在某些特殊情况下无法进行转储和/或加载的错误。尤其是对于产生过大块的键分布的表的处理得到了改进。
事务集(GTID_EXECUTED)处理
支持更新GTID_EXECUTED。在MySQL Shell 8.0.21中创建的转储文件在可用时已经存储了GTID_EXECUTED的值。在8.0.22版本中,添加了一个新的updateGtidSet选项。
用户过滤
向dumpInstance和loadDump添加了新的includeUsers
和excludeUsers
选项,从而可以对复制的用户帐户进行精细控制。
从MySQL 5.6转储
现在可以从MySQL 5.6转储并将这些转储加载到MySQL 5.7或8.0中。但是,从MySQL 5.6转储时,不支持对用户帐户进行转储。
一致的转储,不使用FLUSH TABLES WITH READ LOCK
Shell使用带有独立事务的多个线程执行并行转储。执行FLUSH TABLES WITH READ LOCK来同步事务,这样所有线程都可以在相同的一致视图上工作。在事务启动后立即释放锁,允许应用程序在转储期间继续正常更新数据库。
但是,该语句的执行通常受到权限不足的限制,托管云服务(例如RDS)中的用户无法使用,将产生以下错误:ERROR 1227 (42000): Access denied; you need (at least one of) the RELOAD privilege(s) for this operation
它仍然可以执行一致的转储(例如,使用单个线程或在禁用了consistent选项的情况下从只读副本进行转储)。但是在8.0.22中,对dumpInstance进行了改进,允许不使用FTWRL的并行一致转储。如果FTWRL由于缺少权限而失败,dump将自动回退到通过LOCK TABLES ... READ来同步事务。
使用预认证的OCI对象存储请求支持复杂的转储工作流
OCI对象存储支持通过Pre-Authenticated Requests(PAR)进行身份验证,是基于API签名密钥的认证的替代方案。现在,转储和加载实用程序都支持使用该方式。使用PAR时,在不损害数据安全性和私密性的情况下,支持在使用不同的API密钥和租户区域产生实例和加载转储。此外,PAR支持经过了精心设计,以方便使用。
MySQL InnoDB Cluster
与MySQL Server中一样,对复制相关功能中已弃用的术语进行了更新,同时在必要时保持向后兼容性。
您可以在MySQL术语更新博客文章中了解有关常规更改的信息。
在InnoDB的AdminAPI中完成了一些错误修复和较小的改进。您可以在发行说明中阅读完整列表。
其他变化
改进的Python插件支持
添加了新的装饰器,以便更轻松地在Python中注册扩展对象和函数。
要注册新的扩展对象,只需使用@plugin装饰器
,如下所示:from mysqlsh.plugin_manager import plugin, plugin_function
@plugin
class system_info:
"""
System Information
A collection of tools to gather system information.
"""
@plugin
装饰器将创建扩展对象,并使用doc string来注册,从而在shell上注册内建的帮助数据。
要将函数注册到预先存在的对象中,使用@plugin_function
装饰器,如下所示:@plugin_function("system_info.uptime")
def uptime(session=None, verbose=False):
"""
Get the server uptime
Args:
session (object): The session from which the uptime will be calculated
verbose (bool): The level of vervosity of the output
"""
print("--> foo")
@plugin_function装饰器将使用函数定义将myFunction成员注册到myPlugin对象中,以收集参数名称和类型,以及Shell中内置帮助的文档字符串。
与此同时添加了一个新的--pym
命令行选项,等效于标准python解释器中的-m选项,从而允许直接从命令行调用Python模块。
感谢您关注“MySQL解决方案工程师”!