TaurusDB冷热分离最佳实践
本实践仅针对分区表的场景,以分区为对象,指导您在华为云弹性云服务器ECS上通过Shell脚本定时进行冷数据归档。没有分区的表可以使用TaurusDB控制台或使用SQL设置冷表,具体操作请参考《用户指南》中“使用TaurusDB冷热分离”章节。
建议使用INTERVAL RANGE分区功能自动拓展分区,结合自动设置冷表,将低频使用的分区的数据归档到OBS上。
操作流程
操作步骤
- 创建ECS服务器。
具体操作请参见创建弹性云服务器。
- 确保和TaurusDB实例配置成相同Region、相同可用区、相同VPC、相同安全组。
- 不用购买数据盘。
- 登录ECS并下载安装MySQL客户端。
下载安装MySQL客户端的操作请参考安装MySQL客户端。
- 连接TaurusDB实例,查看表结构以及对应归档状态。
下面以sales表为示例:
如下图所示,查看到表sales当前未归档为冷数据。
- 通过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
- 连接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个分区都归档成功。