MySQL数据档案我们都知道数据是重要的,一些企业需要历史数据是可用的。问题是,对大型表的查询如果不适当优化表现不佳。我们得到了许多客户的请求管理服务清洗/存档大表,为了实现它,我们使用pt-archiver

最近,我们收到一个请求存档一个大表,和客户担心停机时间在档案和性能问题。

我们提出了一个解决方案使用pt-archive客户档案表。这个想法是为了档案旧数据到其他表和保持最新的数据对当前表以最小的性能问题。所有的数据仍将是可用的,并且可以随时查询。

雷竞技下载官网Percona工具包

在这个博客中,我将不能解释如何使用pt-archiver,但我们将讨论pt-archiver的一个用例。

如果您不熟悉pt-archiver,请参考“想要存档表吗?使用Pe雷竞技下载官网rcona工具包pt-archive”;它解释了pt-archiver如何工作和各种pt-archiver参数。

我们将测试数据档案价值保持100天的数据与几个简单的步骤演示。

注意:这个方法使用时间戳数据类型来过滤数据。

  1. 创建了两个虚拟表。
  2. 在源表中插入记录。
  3. 档案记录使用- -条件从源到目标表/业务需求。
  4. 重命名表。
  5. 添加Pt-archiver cron。

这个图更能说明这个过程。

还记得- - - - - -在这个例子中日期和定下的条件只是一个参考。使用存档条件pt-archiver按业务需求。

让我们创建一个源表并插入记录使用mysql_random_data_load:

让我们创建目标表;

(使用下表仅供演示目的)

创建以下触发使用pt-online-schema-change

为什么触发器?

任何修改在原表数据副本将反映在新表,因为pt-online-schema-change创建触发器原始表更新相应的新表中的行。

(出于演示的目的,我添加了从pt-online-schema-change创建的触发器测试运行)

验证所有触发器创建了。

输出应该类似

使用pt-archiver复制过去100天的数据。验证与排练,

(屏幕会话可以用来执行pt-archiver如果表很大的大小)。

输出应该是这样的:

让我们执行pt-archiver:

(以下Pt-archiver将价值100天的数据复制到_new表和触发器将最新的_new表)。

pt-archiver输出应该是这样的:

pt-archiver完成后,检查条件pt-archiver的代码:

(应该是0)

下一步是检查行插入一个新表,比较它与原来的表。

注意:以下测试的结果只是例子;使用正确的日期或条件:

为什么重命名表?

这个想法是为了保持100天的新表中的数据和重命名它作为源表,和原始表_归档文件前缀的所有数据,包括最后的100天。

它应该是这样的:

使用pt-online-schema-change创建的触发器。

一旦完成表重命名,blogpost表的数据复制到_archive表。

让我们添加pt-archiver命令cron,使流程自动化。(建议创建脚本,使用以下文档命令,和测试它。)

现在是时候检查如果cron成功。

检查是否已经复制到行删除test.blogpost_archive表,删除了test.blogpost:

验证的blogpost表有100天的数据,和下面的查询应该返回0行:

希望你发现这个用例的pt-archiver帮助当你需要清洗/归档大型表!

订阅
通知的
客人

0评论
内联反馈
查看所有评论