MYSQL线上数据库表归档工具推荐Percona-Toolkit 之 pt-archiver
Percona Toolkit中的pt-archiver是一个用于归档数据的工具,它可以有效地将旧数据移动到另一个表中,而不会对生产数据库性能产生太大影响。 https://github.com/percona/percona-toolkit pt-archiver的核心思路是以空间换时间,它通过创建一个临时表来存放需要保留的“热”数据,并使用触发器(Triggers) 来保证数据一致性,最后通过一次快速的表名交换来完成归档。 ⚙️ 第一步:前置检查 在开始操作前,工具会先进行一轮严格的环境检查,如不满足以下任一条件将直接退出,不予执行。 🛠️ 第二步:创建临时表 通过环境检查后,工具会创建一个与原始表结构完全相同的空临时表(默认命名为 原表名_tmp),作为新数据的“容器”。 🔗 第三步:创建触发器(核心机制) 这是重构版保证数据一致性的关键。在向临时表复制数据的过程中,原表可能会继续接收业务的读写请求。为了保证这部分增量数据不丢失,工具会在原表上创建三个 AFTER 类型的触发器,将期间所有的数据变更实时同步到临时表。 这三种触发器协同工作的逻辑如下: 通过这套触发器机制,临时表的数据始终与原表保持同步,无论复制过程耗时多久,都不会丢失增量数据。 📦 第四步:复制数据 部署好触发器后,工具开始分批将原表中的数据复制到临时表。工具会使用 WHERE 条件来筛选出需要保留的数据(例如近7天的记录)。 注意:为了将对线上数据库的影响降到最低,工具在复制时会采取低优先级策略(INSERT LOW_PRIORITY IGNORE),并默认在每复制完一批数据(如1000行)后主动休眠1秒。 🔄 第五步:原子切换 当所有符合条件的“热数据”都复制完成后,归档工作进入最后一步。工具会执行一个原子的…







