MySQL Shell 8.0.22 已经发布,现在可以下载了。
在新版本中除了变化描述及修复bug外,还介绍了一些更有显著的增强。
备份和加载程序
importTable:自定义数据转变
importTable程序现在支持使用任意的数据格式来在MySQL中导入数据,还可以在decodeColumns选项中指定任意的SQL表达式,来计算每一行的加载。
这允许在导入或迁移表时对数据进行转换、规范化和/或重新规整,并实现简单的提取-转换-加载工作流作为MySQL Shell脚本。
exportTable
作为importTable的伙伴,一个新的exportTable程序现在已经引入,它可以用来从单独的表上导出行数据,并输出不同的格式,包括 CSV,TSV,JSON 等。结合importTable工具,数据可以作为本地文件保存在OCI对象存储上。
dumpTable
一个新的程序 dumpTables 引入,用于备份单个的表,并带上建表的DDL。备份实例的大部分选项都支持,备份schema也同样支持。另外,它还支持加载 本身创建的备份到不同的schema下面。
备份及还原期间提升块的效率
当前备份和/或还原在某些情况的bug已经修复,在实践中,对于产生过大块的键分布的表的处理得到了改进。
事物集(GTID_EXECUTED)处理
支持更新 GTID_EXECUTED。当GTID_EXECUTED可用时MySQL Shell 8.0.21 创建的备份文件会保存该值。在MySQL Shell 8.0.22 中,添加了一个新的选项 updateFtidSet。
用户过滤
在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
这仍然有可能完成一个一致性备份(例如,使用单线程或去备份一个只读复制从库,且不带有一致性选项)。但是在 8.0.22 上,dumpInstance 改进,允许不带有FTWRL的并行一致性备份。若FTWRL由于缺乏权限错误,备份将会自动回退到带有LOCK TABLE....READ 语句的同步事物备份。
支持复杂的备份工作流如使用预认证请求的OCI对象存储
OCI对象存储支持通过Pre-Authenticated Requests(PAR)方式的认证,允许一个原生的API认证。备份和还原程序现在都支持这个认证。PAR支持产生备份和加载备份使用不同的API访问key,在安全和隐私之间折衷。而且,PAR支持是非常方便及容易使用。
MySQL InnoDB Cluster
在MySQL服务器上,已经弃用了复制相关的术语,新版本对此做了必要的兼容。
多个bug修复了,部分功能进行了改进,可以在版本信息中看到详细情况。
其他变化
提高了python插件支持
现在在python中装饰器可以非常容易的注册到扩展对象和方法上。
注册一个新的扩展对象非常容易,下面示例如何使用@plugin装饰器:
from mysqlsh.plugin_manager import plugin, plugin_function@pluginclass system_info:"""System InformationA collection of tools to gather system information."""
这个@plugin装饰器将会创建一个可扩展对象,并将他注册,说明信息也注册到帮助文档中。
要注册一个函数到已存在的对象中,可以使用@plugin_function装饰器:
@plugin_function("system_info.uptime")def uptime(session=None, verbose=False):"""Get the server uptimeArgs:session (object): The session from which the uptime will be calculatedverbose (bool): The level of vervosity of the output"""print("--> foo")
这个@plugin_function装饰器将会注册 myFunction 成员到 myPlugin 对象中,以及收集参数名称和类型,以及Shell中内置帮助的文档字符串。
另种方式
添加了一个新的命令行选项 --pym,等价于标准python解释器的 -m选项,允许Python模块在命令中直接调用。