返回顶部
首页 > 资讯 > 数据库 >Percona-Toolkit中pt-archiver如何删除历史数据
  • 882
分享到

Percona-Toolkit中pt-archiver如何删除历史数据

2024-04-02 19:04:59 882人浏览 八月长安
摘要

这篇文章主要介绍Percona-Toolkit中pt-arcHiver如何删除历史数据,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!pt-archiver是Percona-Toolk

这篇文章主要介绍Percona-Toolkit中pt-arcHiver如何删除历史数据,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

pt-archiver是Percona-Toolkit工具集中的一个组件,是一个主要用于对Mysql表数据进行归档和清除工具。它可以将数据归档到另一张表或者是一个文件中。pt-archiver在清除表数据的过程中并不会影响OLTP事务的查询性能。对于数据的归档,它可以归档到另一台服务器上的另一张表,也可归档到一个文件中,文件可以用LOAD DATA INFILE进行数据装载,这个功能其实就类似是表历史数据的增量删除。

对线上历史数据的归档,本人直接用mysqldump后还原,但是归档后删除历史数据,通过pt-archiver感觉比写个shell脚本方便很多。

pt-archiver --help 参数说明主要介绍删除历史数据能用到的。

1、--progress 每多少行打印进度信息

2、--limit  限制select返回的行数

3、--sleep  指定select语句休眠时间

4、--txn-size 指定多少行提交一次事务

5、--bulk-delete 用单个DELETE语句批量删除每个行块。该语句删除块的第一行和最后一行之间的每一行,隐含--commit-each

6、--dry-run 打印查询,不做任何操作后退出

新建表employees_ptarc测试

CREATE TABLE `employees_ptarc` (  
`id` int(11) NOT NULL AUTO_INCREMENT, 
`v_int` int(11) DEFAULT NULL,  
`v_string` varchar(50) DEFAULT NULL,  
`s_string` char(20) NOT NULL,  
PRIMARY KEY (`id`)  
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

通过存储过程造数据:

delimiter $$ 
CREATE PROCEDURE i_employees_ptarc (IN row_num INT) 
BEGIN

DECLARE i INT DEFAULT 0 ; 
WHILE i < row_num DO 
INSERT INTO employees_ptarc (v_int, v_string, s_string) 
VALUES 

floor(1 + rand() * 1000000), 
substring( 
MD5(RAND()), 
1, 
floor(1 + rand() * 20) 
), 
substring(MD5(RAND()), 1, 20) 
) ; 
SET i = i + 1 ; 
END 
WHILE ; END$$

delimiter ;

call i_employees_ptarc(400000);

# pt-archiver --source h=localhost,P=7777,u=root,p='Asd.123@#',D=yoon,t=employees_ptarc,A=utf8 --purge --charset=utf8 --where "id < 400000" --progress=100  --txn-size=100 --limit=100 --bulk-delete  --statistics  --dry-run

SELECT `id`,`v_int`,`v_string`,`s_string` FROM `yoon`.`employees_ptarc` FORCE INDEX(`PRIMARY`) WHERE (id < 400000) AND (`id` < '400000') ORDER BY `id` LIMIT 100 
SELECT `id`,`v_int`,`v_string`,`s_string` FROM `yoon`.`employees_ptarc` FORCE INDEX(`PRIMARY`) WHERE (id < 400000) AND (`id` < '400000') AND ((`id` >= ?)) ORDER BY `id` LIMIT 100 
DELETE FROM `yoon`.`employees_ptarc` WHERE (((`id` >= ?))) AND (((`id` <= ?))) AND (id < 400000) LIMIT 100

生成的删除数据语句为:DELETE FROM `yoon`.`employees_ptarc` WHERE (((`id` >= ?))) AND (((`id` <= ?))) AND (id < 400000) LIMIT 100   如果不是核心业务历史数据,这样操作也是没问题的,但是对于核心库删除历史数据,更希望能够实现的删除语句为:delete from table where id=?  

将pt-archiver的参数bulk-delete去掉,改成txn-size,并加上sleep来控制,这样不会影响DB,如下:

pt-archiver --source h=localhost,P=7777,u=root,p='Asd.123@#',D=yoon,t=employees_ptarc --purge --charset=utf8 --where "id <= 400000" --progress=200  --limit=200 --sleep=1 --txn-size=200  --statistics  --dry-run

SELECT `id`,`v_int`,`v_string`,`s_string` FROM `yoon`.`employees_ptarc` FORCE INDEX(`PRIMARY`) WHERE (id <= 600000) AND (`id` < '400000') ORDER BY `id` LIMIT 100 
SELECT `id`,`v_int`,`v_string`,`s_string` FROM `yoon`.`employees_ptarc` FORCE INDEX(`PRIMARY`) WHERE (id <= 600000) AND (`id` < '400000') AND ((`id` >= ?)) ORDER BY `id` LIMIT 100 
DELETE FROM `yoon`.`employees_ptarc` WHERE (`id` = ?)

查看审计日志

root,localhost,79,608616,QUERY,`yoon`,'DELETE FROM `yoon`.`employees_ptarc` WHERE (`id` = \'110367\')',0

root,localhost,79,608617,QUERY,`yoon`,'DELETE FROM `yoon`.`employees_ptarc` WHERE (`id` = \'110368\')',0

root,localhost,79,608618,QUERY,`yoon`,'DELETE FROM `yoon`.`employees_ptarc` WHERE (`id` = \'110369\')',0

root,localhost,79,608619,QUERY,`yoon`,'DELETE FROM `yoon`.`employees_ptarc` WHERE (`id` = \'110370\')',0

root,localhost,79,608620,QUERY,`yoon`,'DELETE FROM `yoon`.`employees_ptarc` WHERE (`id` = \'110371\')',0

root,localhost,79,608621,QUERY,`yoon`,'DELETE FROM `yoon`.`employees_ptarc` WHERE (`id` = \'110372\')',0

root,localhost,79,608622,QUERY,`yoon`,'DELETE FROM `yoon`.`employees_ptarc` WHERE (`id` = \'110373\')',0

root,localhost,79,608623,QUERY,`yoon`,'DELETE FROM `yoon`.`employees_ptarc` WHERE (`id` = \'110374\')',0

root,localhost,79,608624,QUERY,`yoon`,'DELETE FROM `yoon`.`employees_ptarc` WHERE (`id` = \'110375\')',0

root,localhost,79,608625,QUERY,`yoon`,'DELETE FROM `yoon`.`employees_ptarc` WHERE (`id` = \'110376\')',0

root,localhost,79,608626,QUERY,`yoon`,'DELETE FROM `yoon`.`employees_ptarc` WHERE (`id` = \'110377\')',0

root,localhost,79,608627,QUERY,`yoon`,'DELETE FROM `yoon`.`employees_ptarc` WHERE (`id` = \'110378\')',0

root,localhost,79,608628,QUERY,`yoon`,'DELETE FROM `yoon`.`employees_ptarc` WHERE (`id` = \'110379\')',0

root,localhost,79,608629,QUERY,`yoon`,'DELETE FROM `yoon`.`employees_ptarc` WHERE (`id` = \'110380\')',0

root,localhost,79,608630,QUERY,`yoon`,'DELETE FROM `yoon`.`employees_ptarc` WHERE (`id` = \'110381\')',0

root,localhost,79,608631,QUERY,`yoon`,'DELETE FROM `yoon`.`employees_ptarc` WHERE (`id` = \'110382\')',0

root,localhost,79,608632,QUERY,`yoon`,'DELETE FROM `yoon`.`employees_ptarc` WHERE (`id` = \'110383\')',0

root,localhost,79,608633,QUERY,`yoon`,'DELETE FROM `yoon`.`employees_ptarc` WHERE (`id` = \'110384\')',0

root,localhost,79,608634,QUERY,`yoon`,'DELETE FROM `yoon`.`employees_ptarc` WHERE (`id` = \'110385\')',0

root,localhost,79,608635,QUERY,`yoon`,'DELETE FROM `yoon`.`employees_ptarc` WHERE (`id` = \'110386\')',0

root,localhost,79,608636,QUERY,`yoon`,'DELETE FROM `yoon`.`employees_ptarc` WHERE (`id` = \'110387\')',0

root,localhost,79,608637,QUERY,`yoon`,'DELETE FROM `yoon`.`employees_ptarc` WHERE (`id` = \'110388\')',0

root,localhost,79,608638,QUERY,`yoon`,'DELETE FROM `yoon`.`employees_ptarc` WHERE (`id` = \'110389\')',0

root,localhost,79,608639,QUERY,`yoon`,'DELETE FROM `yoon`.`employees_ptarc` WHERE (`id` = \'110390\')',0

root,localhost,79,608640,QUERY,`yoon`,'DELETE FROM `yoon`.`employees_ptarc` WHERE (`id` = \'110391\')',0

root,localhost,79,608641,QUERY,`yoon`,'DELETE FROM `yoon`.`employees_ptarc` WHERE (`id` = \'110392\')',0

root,localhost,79,608642,QUERY,`yoon`,'DELETE FROM `yoon`.`employees_ptarc` WHERE (`id` = \'110393\')',0

以上是“Percona-Toolkit中pt-archiver如何删除历史数据”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网数据库频道!

您可能感兴趣的文档:

--结束END--

本文标题: Percona-Toolkit中pt-archiver如何删除历史数据

本文链接: https://lsjlt.com/news/62631.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Percona-Toolkit中pt-archiver如何删除历史数据
    这篇文章主要介绍Percona-Toolkit中pt-archiver如何删除历史数据,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!pt-archiver是Percona-Toolk...
    99+
    2024-04-02
  • 【percona-toolkit手册】pt-archiver数据归档
    pt-archiver 简介把MySQL表中的部分行存档到另外的表或者文件中 概要1.用法:pt-archiver [可选项] --source DSN --where WHERE2....
    99+
    2024-04-02
  • MySQL使用pt-archiver归档历史数据
    pt-archiver可以将表按照指定条件归档到历史数据库中,也支持文件导出,对于归档清理线上历史数据非常方便。 如果要归档表的数据到历史数据库的表中,需要预先在历史数据库中创建表结构。 (1) 按照条件...
    99+
    2024-04-02
  • mysql中如何使用percona的pt-archiver工具
    这篇文章给大家分享的是有关mysql中如何使用percona的pt-archiver工具的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。DBA或者运维人员经常需定期对数据进行归档和...
    99+
    2024-04-02
  • pt-archiver 数据删除、迁移工具使用
    1. 数据库连接参数 参数 说明 A 字符编码 D 库 F 从文件读取选项 L 加载数据本地文件 P 端口 S socket文件 a 执行查询的数据库 b 如果是t...
    99+
    2024-04-02
  • 数据库中如何高效率删除大表历史数据
    这篇文章主要介绍数据库中如何高效率删除大表历史数据,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!清理大表历史数据通过将非分区表Online Redefinition转换为以删除条件为...
    99+
    2024-04-02
  • 如何删除Git中的历史记录
    这篇文章主要介绍了如何删除Git中的历史记录的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何删除Git中的历史记录文章都会有所收获,下面我们一起来看看吧。使用 Git 命令可以使用 Git 命令中的 git ...
    99+
    2023-07-05
  • win10如何删除壁纸历史记录
    要删除Windows 10中的壁纸历史记录,您可以按照以下步骤操作:1. 打开“设置”菜单。您可以通过点击任务栏上的“开始”按钮,然...
    99+
    2023-09-01
    win10
  • win10更新历史记录如何删除
    要删除Windows 10的更新历史记录,可以按照以下步骤进行操作:1. 打开“设置”应用程序。你可以点击“开始”菜单,然后点击齿轮...
    99+
    2023-08-22
    win10
  • Git如何从整个历史中删除一个文件
    这篇文章主要介绍了Git如何从整个历史中删除一个文件,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。从整个历史中删除一个文件代码要开源了,但发现其中包括密钥文件或内网ip怎么办...
    99+
    2023-06-27
  • 如何轻松删除vista下指定历史搜索记录
    本篇文章为大家展示了如何轻松删除vista下指定历史搜索记录,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。但凡喜欢偷窥隐私的人,在用别人的电脑的时候,就打开IE浏览器,在百度的搜索框里面双击鼠标,然...
    99+
    2023-06-14
  • mysql中如何删除数据
    这篇文章主要为大家展示了“mysql中如何删除数据”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“mysql中如何删除数据”这篇文章吧。删除数据的mysql语句是...
    99+
    2024-04-02
  • SQLServer中如何删除数据
    要删除数据,可以使用DELETE语句。以下是一个基本的DELETE语句示例: DELETE FROM table_name ...
    99+
    2024-04-09
    SQLServer
  • PostgreSQL中如何删除数据
    要在PostgreSQL中删除数据,可以使用DELETE语句。以下是一个简单的示例: DELETE FROM table_n...
    99+
    2024-04-09
    PostgreSQL
  • java 遍历途中修改数据以及删除数据
    在Java中,如果你需要一边遍历一边修改数据或删除数据,有几种常见的方法可以实现。关键点是要避免在遍历时直接修改或删除集合中的元素,因为这可能导致ConcurrentModificationException异常。以下是一些安全的方式: 1...
    99+
    2023-09-15
    java 开发语言
  • oracle中如何删除重数据
    今天就跟大家聊聊有关oracle中如何删除重数据,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。 前期准备创建测试表cre...
    99+
    2024-04-02
  • php如何遍历删除数组元素
    本篇内容主要讲解“php如何遍历删除数组元素”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php如何遍历删除数组元素”吧!PHP中的数组PHP中的数组是一种数据类型,它用于存储一个或多个值。数组...
    99+
    2023-07-05
  • oracle中如何删除表中数据
    这篇文章给大家分享的是有关oracle中如何删除表中数据的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在oracle中删除表中数据可以使用truncate table 表名、delete from 表名...
    99+
    2023-06-27
  • phpmyadmin如何删除数据表中的数据
    这篇文章主要介绍phpmyadmin如何删除数据表中的数据,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!使用phpmyadmin数据库管理工具删除数据表中的数据,例如:我们还是以us...
    99+
    2024-04-02
  • 数据库中如何批量删除数据
    这篇文章将为大家详细讲解有关数据库中如何批量删除数据,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 在一个Oracle数据库运行过程中,有时候会遇到要批量删除数据的情况...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作