pt-archiver,如何控制归档速率避免主从延迟?题目:什么是数据归档,一般是怎么做的?
难度:low
标签:practice/db,mysql/archive
评分:⭐⭐⭐☆☆(3/5)
数据库归档主要分几种情况。首先是冷备,对应数据基本不再访问,只有特殊要求时才用。大表会做分区表,把对应分区导出做备份,存到对象存储里冷备。如果需要归档后还能查询,之前的方案是把冷数据从数据库迁移到 ES,用 DataX 做异构迁移,也可以做计划任务分批迁移,时间选在业务不繁忙的时候。
优点:分区表 + exchange 导出冷备、DataX 迁 ES 做可查询归档、避开高峰,三条路径都对。
不足:子问题 2、3 没答——归档表索引怎么留、pt-archiver 如何控速防主从延迟。
补充:归档表同结构但只留主键 + 查询维度索引;pt-archiver 用 --limit、--txn-size、--sleep、--max-lag 按主键分批,禁大事务大 DELETE。
归档的本质是「把访问频次低的数据从热存储挪到冷存储,同时保证可追溯」。三条常见路径:分区表 EXCHANGE PARTITION 秒级摘分区;分批迁移到归档表/对象存储;异构进 ES/ClickHouse 支持检索。共同约束是不影响线上:按主键小批量、控制事务大小、感知主从延迟、避开高峰。
EXCHANGE PARTITION 的元数据操作代价pt-archiver 怎么避免主从延迟?——--max-lag 检测延迟自动暂停,--sleep 主动让路。【一句话结论】 归档是把冷数据搬出热库,但必须做到业务无感、数据可查、过程可回滚。
【三点展开】 第一,不再访问的数据走分区表导出到对象存储做冷备,秒级完成。第二,还要查的走分批迁移到归档表或 ES,用 DataX 或定时任务,避开业务高峰。第三,迁移工具要能控速,按主键小批量、限制事务大小、检测到主从延迟就暂停。
【一句边界】 归档不是删数据,合规场景要保留可恢复路径;如果历史查询很频繁,说明该做冷热分层而不是简单归档。