本文将为您介绍如何使用冷数据归档。使用前,请先确认您要归档的格式以及您的集群是否满足要求。更多信息,请参见归档格式对比和版本要求。
版本要求
归档为CSV或ORC格式
产品系列为标准版或集群版时,内核版本需为如下版本之一:
MySQL 8.0.1且修订版本为8.0.1.1.31及以上。
MySQL 8.0.2且修订版本为8.0.2.2.9及以上。
产品系列为多主集群(库表)时,内核版本需为8.0.1.0.13及以上。
归档为IBD格式
内核版本需为MySQL 8.0.1且修订版本为8.0.1.1.43或以上。
归档冷数据
您需先开启冷数据归档。在进行冷数据归档时,您可以根据实际需求选择归档普通表或分区表。
普通表
分区表
支持手动将分区表的部分分区数据归档或归档至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
表示需要查询的分区。
由于归档后的冷数据为单表多文件格式,在查看冷数据时,您可以采用并行查询进行查询优化,详情请参见冷数据并行查询。
修改冷数据
CSV或ORC格式
如果您有低频修改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
与需要导回的分区的
partition_definition
保持一致。示例
在数据库中,将归档在OSS上的分区表
t
中p1
分区上的数据导回至PolarDB存储空间。ALTER TABLE t REORGANIZE PARTITION p1 INTO(PARTITION p1 values less than(100));
IBD格式
与归档前的修改操作无差异,使用归档前的SQL语句修改即可。
删除冷数据
当前仅满足以下版本的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文件后,方可完成完全删除。此外,在流量较大时,此过程可能会存在一定的延迟。
归档格式对比
归档冷数据时,您可以根据以下对比评估选择适合的格式进行归档。
对比项 | CSV | ORC | IBD |
开源格式 | 是 | 是 | 否 |
归档方式 |
| 手动归档: | 手动归档: |
归档速度 | 较ORC格式快 说明 只支持使用单线程方式归档数据。 | 慢 说明 只支持使用单线程方式归档数据。 | 较CSV格式快 说明 支持使用单线程和多线程并行归档两种方式。 |
查询速度 |
说明 支持使用单线程和多线程两种方式读取数据。 |
说明 只支持使用单线程方式读取数据。 | 快 说明 支持使用单线程和多线程两种方式读取数据。 |
支持事务 | 否 | 否 | 是 |
索引能力 | 否 | 否 | 是 |
归档后的数据修改方式 | OSS上的归档表只读,需要将OSS数据导回至PolarDB存储空间,再进行修改。 | 归档后的表能正常执行DML操作。 | |
占用的存储空间 | 与没有索引的InnoDB引擎中的表占用的存储空间一致。 | 相同数据量的情况下,占用的存储空间为CSV格式文件占用的存储空间的45%。 | 与InnoDB引擎中的IBD文件占用的存储空间一致。 |
备份恢复 | 不支持。 说明 进行备份操作时,不会对OSS上已归档的冷数据进行备份,因此不支持通过备份进行库表恢复、备份恢复或按时间点还原操作。 | ||
归档后影响 |
|
|
归档普通表、OSS外表以及分区表均存在相关限制。请在进行归档操作之前仔细阅读,以避免对您的业务产生影响。
冷数据归档后,数据将存储在系统默认的对象存储服务(OSS)上,而非存储在您的OSS中。目前,仅支持在PolarDB控制台上查看归档后的数据列表。