本文将为您介绍如何使用冷数据归档。使用前,请先确认您要归档的格式以及您的集群是否满足要求。更多信息,请参见归档格式对比和版本要求。
版本要求
归档为CSV格式的企业版集群要求如下:
产品系列为集群版时,内核版本需为如下版本之一:
MySQL 8.0.1且修订版本为8.0.1.1.31及以上。
MySQL 8.0.2且修订版本为8.0.2.2.9及以上。
产品系列为多主集群(Limitless)时,内核版本需为8.0.1.0.13及以上。
归档冷数据
您需先开启冷数据归档。在进行冷数据归档时,您可以根据实际需求选择归档普通表或分区表。
普通表
分区表
支持手动将分区表的部分分区数据归档或归档至OSS外表。更多信息,请参见归档分区表或分区表归档至OSS外表。
创建DLM策略自动归档冷数据。更多信息,请参见自动归档冷数据。
查询冷数据
普通表
无论您选择什么归档格式,均可在无需修改表的访问方式的情况下查询归档数据。
分区表
归档至OSS外表:需要修改表的访问方式才可查询到归档数据,即查询指定的归档表。更多信息,请参见分区表归档至OSS外表。
归档分区表:归档后的表为混合分区表。更多信息,请参见查询混合分区。
您可以通过以下两种方式来查询不同引擎的分区数据。
在控制台将
hybrid_partition_query_mix_engine_enabled
参数设置为ON,执行查询语句时,查询结果中就会包含非InnoDB分区的数据。示例如下:SELECT * FROM t1;
其中,
t1
表示需要查询的混合分区表。在控制台将
hybrid_partition_query_mix_engine_enabled
参数设置为OFF,查询指定分区中的数据。示例如下:SELECT * FROM t1 partition (p1);
其中,
t1
表示需要查询的混合分区表,p1
表示需要查询的分区。
由于归档后的冷数据为单表多文件格式,在查看冷数据时,您可以采用并行查询进行查询优化,详情请参见冷数据并行查询。
修改冷数据
如果您有低频修改OSS上冷数据的需求,您可以通过ALTER
语法将OSS上的冷数据导回至PolarDB存储空间进行修改。数据导回后,会同步删除OSS上的冷数据。完成数据修改后,您可以将修改后的表数据再次归档至OSS。
普通表
语法
ALTER TABLE table_name ENGINE[=]engine_name;
参数说明
参数 | 参数说明 |
table_name | 需要导回的OSS表的表名。 |
engine_name | 导回后的引擎类型。 |
注意事项
OSS表为只读状态时,不支持执行修改操作(INSERT
、UPDATE
和DELETE
)。如需修改已经归档的冷数据,您需要将OSS表转换成可读可写的表,如InnoDB表。修改只读状态下的OSS表时,报错信息如下:
1036 - Table 't' is read only
示例
在数据库oss_test
中将OSS表t
导回至PolarDB存储空间。
ALTER TABLE `oss_test`.`t` ENGINE = InnoDB;
修改InnoDB表t
的数据,修改完数据之后,再次将InnoDB引擎中的表t
归档至OSS。示例如下:
ALTER TABLE t ENGINE = CSV CONNECTION = 'default_oss_server';
或
ALTER TABLE t ENGINE = CSV STORAGE OSS;
分区表
语法
ALTER TABLE table_name REORGANIZE PARTITION part_name INTO (partition_definition);
参数说明
参数 | 参数说明 |
table_name | 需要导回的OSS表的表名。 |
part_name | 需要导回的分区名称。 |
partition_definition | 与需要导回的分区的 |
示例
在数据库中,将归档在OSS上的分区表t
中p1
分区上的数据导回至PolarDB存储空间。
ALTER TABLE t REORGANIZE PARTITION p1 INTO(PARTITION p1 values less than(100));
删除冷数据
当前仅满足以下版本的PolarDB MySQL版集群支持删除OSS上对应的文件:
8.0.1版本且小版本需为8.0.1.1.42及以上。
8.0.2版本且小版本需为8.0.2.2.23及以上。
若您的集群的小版本不满足以上版本要求时,暂不支持删除OSS上对应的文件。建议升级您集群的小版本,具体请参见小版本管理。
在您将OSS上的表删除或导回至PolarDB存储空间后,OSS上的文件将不会自动同步删除。确认数据不再使用后,您可以按照以下步骤删除OSS上相应的文件。更多信息,请参见删除OSS上对应的文件。
普通表和OSS外表
你需要使用
DROP TABLE
删除归档表,然后再通过CALL dbms_oss.delete_table_file('database_name', 'table_name');
命令来删除OSS上对应的文件。分区表
通过
CALL dbms_oss.delete_table_file('database_name', 'table_name');
命令来删除OSS上对应的文件。
删除OSS上对应文件的操作为异步执行,需等待集群中的所有节点不再依赖该OSS文件后,方可完成完全删除。此外,在流量较大时,此过程可能会存在一定的延迟。
FORCE STORAGE OSS选项
当前仅满足PolarDB MySQL版8.0.2版本且小版本需为8.0.2.2.29及以上的版本支持FORCE STORAGE OSS选项强制删除OSS文件。
普通表和OSS外表
DROP TABLE table_name [FORCE STORAGE OSS];
说明DROP TABLE命令FORCE STORAGE OSS选项提供了一键式清理能力,可在删除表结构的同时自动删除关联的OSS存储文件。
分区表
ALTER TABLE table_name DROP PARTITION part_name [FORCE STORAGE OSS];
说明ALTER TABLE语句的DROP PARTITION子句配合FORCE STORAGE OSS选项,可实现分区表元数据和对应OSS存储文件的同步删除。
CHANGE PARTITION ENGINE
ALTER TABLE table_name CHANGE PARTITION part_name ENGINE = CSV|ORC [FORCE STORAGE OSS]
说明CHANGE PARTITION ENGINE冷数据归档功能提供强制覆盖机制,允许同名文件的自动替换操作。
归档格式对比
归档冷数据时,您可以根据以下对比评估选择适合的格式进行归档。
对比项 | CSV |
开源格式 | 是 |
归档方式 |
|
归档速度 | 只支持使用单线程方式归档数据。 |
查询速度 | 较差。在没有索引且使用串行查询的情况下,查询性能约为InnoDB存储引擎的五分之一到十分之一。 说明 支持使用单线程和多线程两种方式读取数据。 |
支持事务 | 否 |
索引能力 | 否 |
归档后的数据修改方式 | OSS上的归档表只读,需要将OSS数据导回至PolarDB存储空间,再进行修改。 |
占用的存储空间 | 与没有索引的InnoDB引擎中的表占用的存储空间一致。 |
备份恢复 | 不支持。 说明 进行备份操作时,不会对OSS上已归档的冷数据进行备份,因此不支持通过备份进行库表恢复、备份恢复或按时间点还原操作。 |
归档后影响 |
|
归档普通表、OSS外表以及分区表均存在相关限制。请在进行归档操作之前仔细阅读,以避免对您的业务产生影响。
冷数据归档后,数据将存储在系统默认的对象存储服务(OSS)上,而非存储在您的OSS中。目前,仅支持在PolarDB控制台上查看归档后的数据列表。