首页 > 数据库 >MySQL 数据库归档工具pt-archive 与归档数据的安全存储 与 为什么每次归档都少数...

MySQL 数据库归档工具pt-archive 与归档数据的安全存储 与 为什么每次归档都少数...

时间:2024-01-05 10:37:53浏览次数:44  
标签:city pt -- 归档 archiver MySQL 数据


MySQL 数据库归档工具pt-archive 与归档数据的安全存储 与 为什么每次归档都少数..._mysql


DBA 在日常的工作中,数据归档是DB 人员工作中的必选项。这里有技术的因素和法律的因素,数据库中的业务在使用一段时间内,数据表中必然存在大量的过期的数据,这些数据将不在与当前的业务有关,同时这些数据的存在会影响当前一些SQL 的执行的性能,所以从技术的角度需要进行数据的归档。从法律的因素来讲,数据也是资产,有些数据有恢复和追溯的可能性。

数据归档的方法有很多,基于不同场景,在大批量MySQL 数据库需要归档的情况下,一些使用存储过程,或使用手动的方式都不应该是我们常规的选择,工具化以及可以集成化的手段才是我们需要学习和使用的。

pt-archiver 工具是一个满足在数据归档情况下,同时可以将数据进行清理的程序,他可以将数据插入到另一个表中,或写入文件中的方式进行数据的归档的处理。本身pt-archiver可以支持在归档程序中插入复杂的归档的逻辑进行数据的归档,在通过pt_archiver进行归档的首要注意的部分是表需要有主键的情况下才能进行数据的归档,在数据归档中严禁不指定任何的索引,进行数据归档的行为,因为pt-archiver 的设计是从它选择的索引起始位置开始向前扫描。

同时我们需要弄清楚一点数据归档不是数据备份,数据备份要求的数据的所有表的一致性在备份时间点,但数据归档,是根据业务逻辑将数据抽离走,这点类似ETL的一个过程。

下面列举一些,pt-archiver 中的选项

1  --no-check-columns 默认的情况下,pt_archiver 是要检查原表与目的表之间的字段是否都吻合,数据类型是否匹配。特殊情况下可以通过选项将这个问题忽略

2  --no-check-charset 默认的情况下,pt-archiver 是要检测链接和表之间的字符集是否匹配,在一些情况下通过添加此配置忽略这个设置

3 --columns  在归档中如果目的表和目的文件不需要原表的所有的信息可以退通过此参数来进行数据归档中过滤部分需要的字段进行数据的处理,字段通过逗号来进行分割。

4  --for-update 如果使用了次参数,在对数据库表进行数据的处理读取数据添加此参数后,可以在 select 数据库时添加for update 后缀,保证读取时行的一致性。

5  --limit 这里的在归档中,这个部分默认的每次处理的数据是1行,调整大这个部分可以提高归档的速度,但调整过大会影响在业务期间的查询部分,尤其添加了for  update参数

6  --low-priority-delete  在进行清理的数据的时候,对于删除的操作降低他的操作的等级,降低性能影响。

7  --no-delete  默认的情况是归档的行就要被清理和删除,添加--no-delete 后相当于将pt-archiver 变为数据迁移工具。

8  --progress 将工作的进度进行展示

9 --replace 将数据插入的语句更换成 replace 

10 --retries 默认值为1 ,在操作超时或死锁的情况下,操作会重试多少次,默认1次

11 --skip-foreign-key-checks  在数据处理中禁止外键检查

12  --sleep¶在数据 fetch的情况下,每次的fetch 间隔时间

13 --where 条件

14  --analyze 在操作归档删除后,对原表进行analyze 的操作

根据这些条件,我们下面举一个例子

我们在world_x 数据库中有一个表city 同时我们将表归档到 city_new中,命令是这样写的,这里pt-archiver 使用的是最新的版本。

City 表

mysql> select * from city limit 10;
+----+----------------+-------------+---------------+-------------------------+
| ID | Name           | CountryCode | District      | Info                    |
+----+----------------+-------------+---------------+-------------------------+
|  1 | Kabul          | AFG         | Kabol         | {"Population": 1780000} |
|  2 | Qandahar       | AFG         | Qandahar      | {"Population": 237500}  |
|  3 | Herat          | AFG         | Herat         | {"Population": 186800}  |
|  4 | Mazar-e-Sharif | AFG         | Balkh         | {"Population": 127800}  |
|  5 | Amsterdam      | NLD         | Noord-Holland | {"Population": 731200}  |
|  6 | Rotterdam      | NLD         | Zuid-Holland  | {"Population": 593321}  |
|  7 | Haag           | NLD         | Zuid-Holland  | {"Population": 440900}  |
|  8 | Utrecht        | NLD         | Utrecht       | {"Population": 234323}  |
|  9 | Eindhoven      | NLD         | Noord-Brabant | {"Population": 201843}  |
| 10 | Tilburg        | NLD         | Noord-Brabant | {"Population": 193238}  |
+----+----------------+-------------+---------------+-------------------------+
10 rows in set (0.00 sec)

运行下面的命令,这里city表中最大的ID 没有超过5000,这相当于整体进行数据的归档,并清空city 表。

pt-archiver --source h=192.168.198.101,u=admin,p=admin,P=3306,D=world_x,t=city             --dest h=192.168.198.101,u=admin,p=admin,P=3306,D=world_x,t=city_new  --where "id < '5000'"

MySQL 数据库归档工具pt-archive 与归档数据的安全存储 与 为什么每次归档都少数..._mysql_02

MySQL 数据库归档工具pt-archive 与归档数据的安全存储 与 为什么每次归档都少数..._ci_03

但在归档后,我们发现一个问题,使用pt_archiver 归档中,有一条记录并未进行归档,到 city_new表。

MySQL 数据库归档工具pt-archive 与归档数据的安全存储 与 为什么每次归档都少数..._数据_04

这里也做了反向的测试,在测试中,city_new 到 city 表也会缺一条数据,而且是有规律的都是最后一条数据。经过查询,这与数据库表的自增与pt_archiver 中的 safe-auto-increment 有关,在默认的情况下工具会计算归档数据库的自增与步长,等所以归档期间会会保护一行数据,这里通过参数  --no-safe-auto-increment 来进行数据的归档,会忽略保护措施,归档的数据就与原有的条件对应了。

pt-archiver --source h=192.168.198.101,u=admin,p=admin,P=3306,D=world_x,t=city_new --dest h=192.168.198.101,u=admin,p=admin,P=3306,D=world_x,t=city  --no-safe-auto-increment --where "id < 5000"

MySQL 数据库归档工具pt-archive 与归档数据的安全存储 与 为什么每次归档都少数..._mysql_05

标签:city,pt,--,归档,archiver,MySQL,数据
From: https://blog.51cto.com/u_14150796/9110155

相关文章

  • 2038年MySQL5.7和MariaDB 10.6自动终止服务进程。MySQL 8.0.31未受影响。
    2038年MySQL5.7和MariaDB10.6自动终止服务进程。MySQL8.0.31未受影响。14年内,必须升级MySQL5.7数据库,重要的事情说三遍。见下面截图[Warning]Currenttimehasgotpastyear2038.Validatingcurrenttimewith5iterationsbeforeinitiatingthenormalservershutdownpr......
  • OpenAI换血大震动始末:“ChatGPT之父”奥特曼,缘何被“扫地出门”?
    近期,AI业界发生了一场“大地震”。作为聊天机器人ChatGPT的开发者,OpenAI无疑是最受关注的人工智能公司之一。就是这家公司的联合创始人、CEO、有“ChatGPT之父”之称的阿尔特曼在“疯狂的5天”里,经历了被闪电免职、加入微软、最终又官复原职的戏剧性反转。ChatGPT:我是ChatGPT,一个由......
  • mysql8.0存储过程和存储函数的查看、修改、删除
    5、存储过程和存储函数的查看、修改、删除5.1、查看创建完之后,怎么知道我们创建的存储过程、存储函数是否成功了呢?MySQL存储了存储过程和函数的状态信息,用户可以使用SHOWSTATUS语句或SHOWCREATE语句来查看,也可直接从系统的information_schema数据库中查询。这里介绍3种方法。......
  • 关于JavaScript的技巧一
    1.滚动到页面顶部我们可以使用window.scrollTo()平滑滚动到页面顶部。constscrollToTop=()=>{window.scrollTo({top:0,left:0,behavior:"smooth"});};2.滚动到页面底部当然,如果知道文档的高度,也可以平滑滚动到页面底部。constscrollToBottom=()=>{wind......
  • NeurIPS'23 Paper Digest | PromptTPP: Prompt Pool 与时序点过程模型的持续学习
    为期一周的人工智能和机器学习领域顶级会议 NeurIPS 已于当地时间 12 月 16 日圆满结束。蚂蚁集团有 20 篇论文被本届会议收录,其中《Prompt-augmented Temporal Point Process for Streaming Event Sequence》由蚂蚁集团研究并撰写,作者包括薛思乔、王言、褚志轩、师......
  • 如何配置Zabbix告警邮件通知并基于GPT提供解决方案?
    一、概述时间来到2023年末,距离OpenAI发布GPT-3.5,首次向公众推出ChatGPT已经整整过去了一年。如今,以ChatGPT为代表的人工智能模型已然被应用众多领域,当然也包括IT运维。在IT运维中,通过对接运维监控平台,GPT已经实现为故障告警提供解决方案。本文将以Zabbix对接GPT为例,介绍如何配置Za......
  • NeurIPS'23 Paper Digest | PromptTPP: Prompt Pool 与时序点过程模型的持续学习
    为期一周的人工智能和机器学习领域顶级会议 NeurIPS 已于当地时间 12 月 16 日圆满结束。蚂蚁集团有 20 篇论文被本届会议收录,其中《Prompt-augmented Temporal Point Process for Streaming Event Sequence》由蚂蚁集团研究并撰写,作者包括薛思乔、王言、褚志轩、师......
  • 基于各种场景使用mysqldump逻辑备份数据库
    1.mysqldump备份工具的语法格式mysqldump的使用语法:备份指定数据库mysqldump选项数据库备份指定数据库下的某张表mysqldump选项数据库表备份多个数据库mysqldump选项--database/-B数据库1数据库2备份所有数据库mysqldump选项--all-databases/-......
  • mysql8.0大小写的坑
    这两天又被mysql8.0大小写的问题坑到了,看下面的报错:chown:cannotaccess'./proc/38/fd/6':Nosuchfileordirectorychown:cannotaccess'./proc/38/fd/7':Nosuchfileordirectorychown:cannotaccess'./proc/38/fdinfo/4':Nosuchfileordire......
  • 基于ETLCloud的MySQL到SqlServer实时同步解决方案
    背景在以下场景下会用到不同数据库的实时同步问题,比如:数据备份与容灾、多地域数据同步、数据共享与协作、数据分析与报表生成、实时监控与报警系统等等。大多数情况用到的就是数据备份了吧,相同的数据库还好,不同的数据库不能完全兼容就很麻烦,所以会用到SymmetricDS、Maxwell、Debezi......