暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PolarDB MySQL 之手动归档冷数据

xiaozhuo 2023-09-25
486

本文介绍了将冷数据归档为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' [, FORCE];

      当集群版本为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 [, FORCE];
    • 归档为ORC格式的文件:


      ALTER TABLE table_name ENGINE = ORC STORAGE OSS [, FORCE];
  • 参数说明

  • 参数

    说明

    table_name

    需要归档到OSS对象存储中的表名。

    FORCE

    是否直接覆盖OSS对象存储中的数据。取值如下:

    • 'force':对于OSS对象存储中已经存在的数据文件,可以直接覆盖,重新写入;

    • '':对于OSS对象存储中已经存在的数据文件,系统会报文件已经存在的错误。如:


      Target file for archived table exists on oss.
  • 注意事项

    • 支持对InnoDB引擎和X-Engine引擎上的表使用冷数据归档功能。

    • 冷数据归档过程中不支持对表进行修改(DDL和DML)。

    • 冷数据归档功能不支持将数据文件归档到用户自建的OSS Server中。

    • 对InnoDB引擎中的表使用冷数据归档功能时,执行冷数据归档操作的表中必须有主键。

    • 冷数据归档完成后,OSS上的归档表只读,且查询性能较差。您需要提前测试数据归档后能否满足您的查询性能要求。

  • 示例

    将表t中的数据以CSV格式归档至OSS。

    1. 在数据库oss_test中创建InnoDB表t


    2. CREATE TABLE t(a int, b int, c int, primary key(a)) ENGINE = INNODB;
    3. 在表t中插入数据。


    4. INSERT INTO t VALUES (1,2,3);
    5. 通过ALTER命令归档冷数据。


    6. ALTER TABLE t ENGINE = CSV CONNECTION = 'default_oss_server';
    7. 集群版本为PolarDB MySQL版8.0.1.1.33版本及以上,或PolarDB MySQL版8.0.2.2.13版本及以上,或多主集群(库表)为PolarDB MySQL版8.0.1.1.15及以上时,使用以下命令:


    8. ALTER TABLE t ENGINE = CSV STORAGE OSS; 
    9. 归档完成后,您可以登录PolarDB控制台查看归档在OSS上的库表信息,或通过SQL语句查看归档表上的数据:

      • 查看归档在OSS上的库表信息:登录PolarDB控制台。在目标集群的配置与管理 > 冷数据归档路径下,查看归档在OSS上的库表信息。

      • 查看归档表上的数据:通过SQL语句查看归档表上的数据,而不需要修改表的访问方式。如:


        SELECT * FROM t;

归档分区表

说明

  • 归档分区表功能目前处于灰度阶段,如需使用,请前往配额中心,根据配额IDpolardb_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 [FORCE];
    • 归档为ORC格式的文件:


      ALTER TABLE table_name CHANGE PARTITION part_name ENGINE = ORC [FORCE];
  • 参数说明

    参数

    说明

    table_name

    需要归档到OSS对象存储中的表名。

    part_name

    需要归档到OSS对象存储中的分区名。

    FORCE

    是否直接覆盖OSS对象存储中的数据。取值如下:

    'force':对于OSS对象存储中已经存在的数据文件,可以直接覆盖,重新写入;

    '':对于OSS对象存储中已经存在的数据文件,系统会报文件已经存在的错误。如:


    Target file for archived table exists on oss.
  • 注意事项

    • 仅支持对InnoDB引擎上的分区表使用冷数据归档功能。

    • 对分区表执行分区归档操作时,至少保留一个分区在InnoDB引擎上,即无法对最后一个InnoDB引擎上的分区执行冷数据归档操作。

    • 归档后的表为混合分区表,不支持对混合分区表执行DDL操作。使用时的注意事项详情请参见创建混合分区

    • 暂不支持将归档后的分区取回。

    • 暂不支持对归档后的分区数据进行修改。

    • 暂不支持对分区表中的二级分区执行冷数据归档操作。

    • 暂不支持对LIST DEFAULT HASH分区表的DEFAULT分区执行冷数据归档操作。

    • 暂不支持对HASH或KEY类型的分区表执行冷数据归档操作。

    • 暂不支持对整张分区表执行手动归档冷数据操作。

    • 归档分区中的数据时,若OSS上存在同名文件,则会执行失败并报类似如下错误信息:


      Target file for archived table exists on oss.

      您需要执行以下命令来覆盖OSS上已存在的文件。执行命令时请根据实际情况替换table_namepart_name


      ALTER TABLE table_name CHANGE PARTITION part_name ENGINE = CSV/ORC FORCE;
  • 示例

    将表tp1p2分区上的数据以CSV格式归档至OSS。

    1. 在数据库中创建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
      );
    2. 在表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);
    3. 执行以下命令,将p1p2分区上的数据归档至OSS引擎。


      ALTER TABLE t CHANGE PARTITION p1 ENGINE = csv;
      ALTER TABLE t CHANGE PARTITION p2 ENGINE = csv;

    归档完成后,您可以登录PolarDB控制台查看归档在OSS上的库表信息,或通过SQL语句查询混合分区表中的数据:

    • 查看归档在OSS上的库表信息:登录PolarDB控制台。在目标集群的配置与管理 > 冷数据归档路径下,查看归档在OSS上的库表信息。

    • 查询混合分区表中的数据:操作详情请参见查询混合分区

将OSS数据导回至PolarStore

如果您有低频修改归档到OSS上冷数据的需求,您可以通过ALTER ENGINE语法将OSS数据导回至PolarStore进行修改。数据导回至PolarStore后,会同步删除OSS上的冷数据。修改完数据之后,您可以再次将修改后的表归档为OSS表。

  • 语法


    ALTER TABLE table_name ENGINE[=]engine_name;
  • 参数说明

    参数

    参数说明

    table_name

    需要导回的OSS表的表名。

    engine_name

    导回后的引擎类型。

  • 注意事项

    OSS表为只读状态时,不支持执行修改操作(INSERTUPDATEDELETE)。如需修改已经归档的冷数据,您需要将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;
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论