← 每日面试题 学习看板

什么是数据归档,一般是怎么做的?

面试题/01实践场景题/实践场景题目/数据库与存储/什么是数据归档,一般是怎么做的?.md
1. 如何在不影响业务的情况下,对千万级大表进行数据归档?
2. 归档后的数据如何保证可查询?需要保留哪些索引?
3. 如果使用pt-archiver,如何控制归档速率避免主从延迟?

面试记录 2026-10-21

题目:什么是数据归档,一般是怎么做的?

难度: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 支持检索。共同约束是不影响线上:按主键小批量、控制事务大小、感知主从延迟、避开高峰。

第二部分:考察方向与延伸递进

  1. pt-archiver 怎么避免主从延迟?——--max-lag 检测延迟自动暂停,--sleep 主动让路。
  2. 归档表要不要保留原索引?——只保留查询必需的,索引越多写入越慢。
  3. 归档如何验证正确性?——行数 + 校验和比对,先验从库再删主库。

第三部分:面试者参考回答

【一句话结论】 归档是把冷数据搬出热库,但必须做到业务无感、数据可查、过程可回滚。

【三点展开】 第一,不再访问的数据走分区表导出到对象存储做冷备,秒级完成。第二,还要查的走分批迁移到归档表或 ES,用 DataX 或定时任务,避开业务高峰。第三,迁移工具要能控速,按主键小批量、限制事务大小、检测到主从延迟就暂停。

【一句边界】 归档不是删数据,合规场景要保留可恢复路径;如果历史查询很频繁,说明该做冷热分层而不是简单归档。