文档首页/ 云数据库 TaurusDB/ 最佳实践/ TaurusDB冷热分离最佳实践
更新时间:2024-12-17 GMT+08:00
分享

TaurusDB冷热分离最佳实践

本实践仅针对分区表的场景,以分区为对象,指导您在华为云弹性云服务器ECS上通过Shell脚本定时进行冷数据归档。没有分区的表可以使用TaurusDB控制台或使用SQL设置冷表,具体操作请参考使用TaurusDB冷热分离

建议使用INTERVAL RANGE分区功能自动拓展分区,结合自动设置冷表,将低频使用的分区的数据归档到OBS上。

操作流程

图1 流程图

操作步骤

  1. 创建ECS服务器。

    具体操作请参见创建弹性云服务器
    • 确保和TaurusDB实例配置成相同Region、相同可用区、相同VPC、相同安全组。
    • 不用购买数据盘。

  2. 登录ECS并下载安装MySQL客户端。

    下载安装MySQL客户端的操作请参考安装MySQL客户端

  3. 连接TaurusDB实例,查看表结构以及对应归档状态。

    下面以sales表为示例:

    如下图所示,查看到表sales当前未归档为冷数据。

  4. 通过Shell脚本自动设置冷表。

    在ECS上创建如下脚本,实现从2024-07-23开始,每天01:00:00对表sales的分区进行归档。

    以下脚本以归档sales表为示例:

    #!/usr/bin/sh
    passwd=******
    user="root"
    ip=*.*.*.*
    conn="./mysql -u$user -h$ip -p$passwd"
    database=test
    table=sales
    start_time="2024-07-23 01:00:00"
    last_time=$start_time
    partition_order=2
    while [ true ]
      do
        res=$($conn -se"SELECT TIMEDIFF(current_timestamp(),'$last_time') > 0;")
        if [ $res -gt 0 ]; then
          partition_nums=$($conn -se"select count(1) from information_schema.partitions where table_schema=\"$database\" and table_name=\"$table\";")
          if [ $partition_order -gt $partition_nums ]; then
            last_time=$($conn -se"SELECT DATE_ADD('$last_time',INTERVAL 1 DAY);")
            continue
          fi
          partition_name=$($conn -se"select PARTITION_NAME from information_schema.partitions where table_schema=\"$database\" and table_name=\"$table\" and PARTITION_ORDINAL_POSITION = $partition_order;")
    
    
          $conn -e"CALL dbms_schs.make_io_transfer(\"start\", \"${database}\", \"${table}\", \"${partition_name}\", \"\", \"obs\");"
          if [ $? -ne 0 ]; then
            echo "archive failed"
          fi
          partition_order=$(($partition_order+1))
        else 
          sleep 10m
          continue
        fi
      done

  5. 连接TaurusDB实例,查看对应表的归档状态。

    下面以sales表为示例:

    CALL dbms_schs.show_io_transfer("test", "sales", "_p20211001000000");

    CALL dbms_schs.show_io_transfer("test", "sales", "_p20211101000000");

    CALL dbms_schs.show_io_transfer("test", "sales", "_p20211201000000");

    当status列显示为FINISH时,表示3个分区都归档成功。

相关文档