iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >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://www.lsjlt.com/news/62631.html(转载时请注明来源链接)

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Percona-Toolkit中pt-archiver如何删除历史数据
    这篇文章主要介绍Percona-Toolkit中pt-archiver如何删除历史数据,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!pt-archiver是Percona-Toolk...
    99+
    2022-10-18
  • 数据库中如何高效率删除大表历史数据
    这篇文章主要介绍数据库中如何高效率删除大表历史数据,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!清理大表历史数据通过将非分区表Online Redefinition转换为以删除条件为...
    99+
    2022-10-18
  • 如何删除Git中的历史记录
    这篇文章主要介绍了如何删除Git中的历史记录的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何删除Git中的历史记录文章都会有所收获,下面我们一起来看看吧。使用 Git 命令可以使用 Git 命令中的 git ...
    99+
    2023-07-05
  • Git如何从整个历史中删除一个文件
    这篇文章主要介绍了Git如何从整个历史中删除一个文件,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。从整个历史中删除一个文件代码要开源了,但发现其中包括密钥文件或内网ip怎么办...
    99+
    2023-06-27
  • mysql中如何删除数据
    这篇文章主要为大家展示了“mysql中如何删除数据”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“mysql中如何删除数据”这篇文章吧。删除数据的mysql语句是...
    99+
    2022-10-19
  • oracle中如何删除重数据
    今天就跟大家聊聊有关oracle中如何删除重数据,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。 前期准备创建测试表cre...
    99+
    2022-10-18
  • oracle中如何删除表中数据
    这篇文章给大家分享的是有关oracle中如何删除表中数据的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在oracle中删除表中数据可以使用truncate table 表名、delete from 表名...
    99+
    2023-06-27
  • 数据库中如何批量删除数据
    这篇文章将为大家详细讲解有关数据库中如何批量删除数据,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 在一个Oracle数据库运行过程中,有时候会遇到要批量删除数据的情况...
    99+
    2022-10-18
  • phpmyadmin如何删除数据表中的数据
    这篇文章主要介绍phpmyadmin如何删除数据表中的数据,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!使用phpmyadmin数据库管理工具删除数据表中的数据,例如:我们还是以us...
    99+
    2022-10-18
  • 如何在PHP中遍历数组并实现元素删除
    PHP中的数组是一种极为常用的数据类型,它使用键值对存储数据,可以存储任意类型的值,包括数字、字符串、对象等。在实际开发中,我们经常需要对数组进行遍历和操作,其中删除数组元素是比较常见的操作之一。本文将介绍如何在PHP中遍历数组并实现元素删...
    99+
    2023-05-14
  • MySQL如何删除表中的数据
    目录如何删除表中的数据一、delete删除表中的数据二、drop删除表中的数据三、truncate删除表中的数据删除表数据但不删除表结构SQL语句下面是两种SQL语句如何删除表中的数据 mysql删除表中的数据...
    99+
    2022-11-09
  • oracle中如何删除亿级数据
    目录oracle删除亿级数据1、drop table ,然后再create table,插入数据2、使用delete批量删除3、使用truncate table ,然后再插入数据oracle数据库亿级数据量清理...
    99+
    2023-02-15
    oracle删除数据 oracle删除亿级数据 oracle数据删除
  • vue中如何删除一条数据
    这篇文章主要介绍“vue中如何删除一条数据”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“vue中如何删除一条数据”文章能帮助大家解决问题。vue中删除一条数据的方法:1、通过“arr.splice(...
    99+
    2023-07-04
  • mysql如何删除数据表中的行数据
    小编给大家分享一下mysql如何删除数据表中的行数据,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!在mysql中可以使用DELE...
    99+
    2022-10-18
  • 数据库中如何一键查看索引历史使用情况
    这篇文章给大家分享的是有关数据库中如何一键查看索引历史使用情况的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。假设这么一个场景,有一张表建了很多索引,我们可以怎么通过观察索引历史使...
    99+
    2022-10-18
  • mysql如何删除数据库中的表
    小编给大家分享一下mysql如何删除数据库中的表,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!基本语法当需要删除一个表的时候,可...
    99+
    2022-10-18
  • mongodb如何删除表中所有数据
    mongodb删除表中所有数据的方法:在mongodb中可以使用db.表名.drop()删除表中所有的数据,该方法只能删除当前库中存在的表。如果需要删除表记录可以使用“db. 集合名 .remove({ 条件 })”或“db. 集合名 .d...
    99+
    2022-10-07
  • oracle如何删除表中所有数据
    要删除Oracle表中的所有数据,可以使用以下两种方法:方法一:使用TRUNCATE TABLE语句```sqlTRUNCATE T...
    99+
    2023-10-08
    oracle
  • mysql如何删除表中一行数据
    可以使用DELETE语句来删除表中的一行数据。DELETE FROM 表名 WHERE 条件;其中,表名是要删除数据...
    99+
    2023-10-07
    mysql
  • MySQL中如何更新数据以及删除数据
    这篇文章主要介绍了MySQL中如何更新数据以及删除数据,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。(1)、更新数据MySQL中使用upda...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作