本文介绍了将冷数据归档为CSV或ORC格式的方法,以及将OSS表数据导回至PolarStore的方法。
前提条件
若要归档为CSV格式的文件,企业版集群版本需满足以下要求,您可以通过查询版本号来确认集群版本。
产品系列为集群版,且版本为以下版本之一:
PolarDB MySQL版8.0.1版本且小版本为8.0.1.1.32及以上。
PolarDB MySQL版8.0.2版本且小版本为8.0.2.2.10及以上。
说明集群版本为以下版本时,手动归档冷数据不记录Binlog日志。
PolarDB MySQL版8.0.1版本且小版本为8.0.1.1.33及以上。
PolarDB MySQL版8.0.2版本且小版本为8.0.2.2.11.1及以上。
产品系列为多主集群(库表),且版本为PolarDB MySQL版8.0.1.0.13及以上。
若要归档为ORC格式的文件,企业版集群版本需为PolarDB MySQL版8.0.2版本且修订版本为8.0.2.2.16.2及以上。您可以通过查询版本号来确认集群版本。
已开启冷数据归档功能。
已连接数据库集群。
使用说明
归档普通表
冷数据归档执行的是表归档操作,执行冷数据归档操作后的表称为归档表(只读),归档表的引擎为OSS引擎,归档表的数据文件存储在OSS上。执行冷数据归档操作后,原来本地表在PolarStore上占用的空间将被释放。
语法
归档为CSV格式的文件:
ALTER TABLE table_name ENGINE = CSV CONNECTION = 'default_oss_server';
当集群版本为PolarDB MySQL版8.0.1.1.33版本及以上,或PolarDB MySQL版8.0.2.2.13版本及以上,或多主集群(库表)为PolarDB MySQL版8.0.1.1.15及以上时,除上述语法外,还支持使用以下语法来手动归档冷数据:
ALTER TABLE table_name ENGINE = CSV STORAGE OSS;
归档为ORC格式的文件:
ALTER TABLE table_name ENGINE = ORC STORAGE OSS;
如果OSS对象存储中存在与归档的数据文件名称冲突的数据文件,系统会报文件已经存在的错误。例如:
Target file for archived table exists on oss.
您可以在以上三个语法中通过添加FORCE关键字来覆盖OSS对象存储中已经存在的数据文件。以归档为CSV格式为例,添加FORCE关键字的语法如下:
ALTER TABLE table_name ENGINE = CSV CONNECTION = 'default_oss_server' , FORCE;
参数说明
参数 | 说明 |
table_name | 需要归档到OSS对象存储中的表名。 |
注意事项
支持对InnoDB引擎和X-Engine引擎上的表使用冷数据归档功能。
冷数据归档过程中不支持对表进行修改(DDL和DML)。
冷数据归档功能不支持将数据文件归档到用户自建的OSS Server中。
对InnoDB引擎中的表使用冷数据归档功能时,执行冷数据归档操作的表中必须有主键。
冷数据归档完成后,OSS上的归档表只读,且查询性能较差。您需要提前测试数据归档后是否能满足您的查询性能要求。
示例
将表t
中的数据以CSV或ORC格式归档至OSS。
在数据库
oss_test
中创建InnoDB表t
。在表
t
中插入数据。通过
ALTER
命令归档冷数据。归档为CSV格式:
ALTER TABLE t ENGINE = CSV CONNECTION = 'default_oss_server';
集群版本为PolarDB MySQL版8.0.1.1.33版本及以上,或PolarDB MySQL版8.0.2.2.13版本及以上,或多主集群(库表)为PolarDB MySQL版8.0.1.1.15及以上时,使用以下命令:
ALTER TABLE t ENGINE = CSV STORAGE OSS;
归档为ORC格式:
ALTER TABLE t ENGINE = ORC STORAGE OSS;
归档完成后,您可以登录PolarDB控制台查看归档在OSS上的库表信息,或通过SQL语句查看归档表上的数据:
查看归档在OSS上的库表信息:登录PolarDB控制台。在目标集群的 路径下,查看归档在OSS上的库表信息。
查看归档表上的数据:通过SQL语句查看归档表上的数据,而不需要修改表的访问方式。例如:
SELECT * FROM t;
CREATE TABLE t(a int, b int, c int, primary key(a)) ENGINE = INNODB;
INSERT INTO t VALUES (1,2,3);
归档分区表
归档分区表功能目前处于灰度阶段,如需使用,请前往配额中心,根据配额ID
polardb_mysql_hybrid_partition
找到配额名称,在对应的操作列单击申请
来开通该功能。企业版集群版本为PolarDB MySQL版8.0.2版本且修订版本为8.0.2.2.14及以上时,支持归档分区表。
归档分区表是对表的分区进行归档,归档后的表为混合分区表,归档后分区的数据文件保存在OSS上。执行完归档操作后,分区在PolarStore上占用的空间会自动释放。
语法
归档为CSV格式的文件:
ALTER TABLE table_name CHANGE PARTITION part_name ENGINE = CSV;
归档为ORC格式的文件:
ALTER TABLE table_name CHANGE PARTITION part_name ENGINE = ORC;
如果OSS对象存储中存在与归档的数据文件名称冲突的数据文件,系统会报文件已经存在的错误。例如:
Target file for archived table exists on oss.
您可以在以上三个语法中通过添加FORCE关键字来覆盖OSS对象存储中已经存在的数据文件。以归档为CSV格式为例,添加FORCE关键字的语法如下:
ALTER TABLE table_name CHANGE PARTITION part_name ENGINE = CSV FORCE;
参数说明
参数 | 说明 |
table_name | 需要归档到OSS对象存储中的表名。 |
part_name | 需要归档到OSS对象存储中的分区名。 |
注意事项
仅支持对InnoDB引擎上的分区表使用冷数据归档功能。
对分区表执行分区归档操作时,至少保留一个分区在InnoDB引擎上,即无法对最后一个InnoDB引擎上的分区执行冷数据归档操作。
归档后的表为混合分区表,不支持对混合分区表执行DDL操作。使用时的注意事项详情请参见创建混合分区。
暂不支持对归档后的分区数据进行修改。
暂不支持对分区表中的二级分区执行冷数据归档操作。
暂不支持对LIST DEFAULT HASH分区表的DEFAULT分区执行冷数据归档操作。
暂不支持对HASH或KEY类型的分区表执行冷数据归档操作。
暂不支持对整张分区表执行手动归档冷数据操作。
归档分区中的数据时,若OSS上存在同名文件,则会执行失败并报类似如下错误信息:
Target file for archived table exists on oss.
您需要执行以下命令来覆盖OSS上已存在的文件。执行命令时请根据实际情况替换
table_name
和part_name
。ALTER TABLE table_name CHANGE PARTITION part_name ENGINE = CSV/ORC FORCE;
示例
将表t
中p1
和p2
分区上的数据以CSV格式归档至OSS。
在数据库中创建InnoDB表
t
。CREATE TABLE t(a int, b int, c int, primary key(a)) PARTITION BY RANGE(a) (PARTITION p1 values less than(100), PARTITION p2 values less than(200), PARTITION p3 values less than MAXVALUE );
在表
t
中插入数据。INSERT INTO t VALUES(1,1,1); INSERT INTO t VALUES(10,10,10); INSERT INTO t VALUES(100,100,100); INSERT INTO t VALUES(150,150,150); INSERT INTO t VALUES(200,200,200); INSERT INTO t VALUES(1000,1000,1000);
执行以下命令,将
p1
和p2
分区上的数据归档至OSS引擎。归档为CSV格式:
ALTER TABLE t CHANGE PARTITION p1 ENGINE = csv; ALTER TABLE t CHANGE PARTITION p2 ENGINE = csv;
归档为ORC格式:
ALTER TABLE t CHANGE PARTITION p1 ENGINE = ORC; ALTER TABLE t CHANGE PARTITION p2 ENGINE = ORC;
归档完成后,您可以登录PolarDB控制台查看归档在OSS上的库表信息,或通过SQL语句查询混合分区表中的数据:
查看归档在OSS上的库表信息:登录PolarDB控制台。在目标集群的 路径下,查看归档在OSS上的库表信息。
查询混合分区表中的数据:操作详情请参见查询混合分区。
将OSS数据导回至PolarStore
导回在OSS上归档的普通表中的数据
如果您有低频修改归档到OSS上冷数据的需求,您可以通过ALTER ENGINE
语法将OSS数据导回至PolarStore进行修改。数据导回至PolarStore后,会同步删除OSS上的冷数据。修改完数据之后,您可以再次将修改后的表归档为OSS表。
语法
ALTER TABLE table_name ENGINE[=]engine_name;
参数说明
参数 | 参数说明 |
table_name | 需要导回的OSS表的表名。 |
engine_name | 导回后的引擎类型。 |
注意事项
OSS表为只读状态时,不支持执行修改操作(INSERT
、UPDATE
和DELETE
)。如需修改已经归档的冷数据,您需要将OSS表转换成可读可写的表,如InnoDB表。修改只读状态下的OSS表时,报错信息如下:
1036 - Table 't1' is read only
示例
在数据库oss_test
中将OSS表t
导回至PolarStore。
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;
导回在OSS上归档的分区表中的数据
如果您有将已归档的分区表中的数据导回至PolarStore的需求,您可以使用ALTER语句将OSS上的数据导回至PolarStore。数据导回后,会同步删除OSS上的冷数据。
语法
ALTER TABLE table_name REORGANIZE PARTITION part_name INTO (partition_definition);
参数说明
参数 | 参数说明 |
table_name | 需要导回的OSS表的表名。 |
part_name | 需要导回的分区名称。 |
partition_definition | 与需要导回的分区的 |
示例
在数据库中,将归档在OSS上的分区表t
中p1
分区上的数据导回至PolarStore。
ALTER TABLE t REORGANIZE PARTITION p1 INTO(PARTITION p1 values less than(100));
删除OSS上对应的文件
当前仅满足以下版本的PolarDB MySQL版集群支持删除OSS上对应的文件:
8.0.1版本且小版本需为8.0.1.1.42及以上。
8.0.2版本且小版本需为8.0.2.2.23及以上。
若您的集群的小版本不满足以上版本要求时,暂不支持删除OSS上对应的文件。建议升级您集群的小版本,具体请参见小版本升级。
当您将OSS上的表删除或导回至PolarStore后,OSS上的文件不会同步删除。确定数据不再使用后,您可以使用如下语法删除OSS上对应的文件:
CALL dbms_oss.delete_table_file('database_name', 'table_name');
由于删除OSS上对应文件的操作是异步执行的,故需要等待集群中的所有节点都不再依赖OSS文件后才可完全删除,且流量较大时存在一定时延。因此,如果上述命令执行失败并返回错误信息OSS files are still in use
时,您可以等待一段时间后再重新执行该命令。
- 本页导读 (0)