如何实现大数据量数据库的历史数据归档

答案 使用工具pt-archiver原理解析作为MySQL DBA,可以说应该没有不知道pt-archiver了,作为pt-toolkit套件中的重要成员,往往能够轻松帮助DBA解决数据归档的问题。例如线上一个流水表,业务仅仅只需要存放最近3个月的流水数据,三个月前的数据做归档即可,那么pt-archiver就可以轻松帮你

如何实现大数据量数据库的历史数据归档

使用工具pt-archiver

原理解析

作为MySQL DBA,可以说应该没有不知道pt-archiver了,作为pt-toolkit套件中的重要成员,往往能够轻松帮助DBA解决数据归档的问题。例如线上一个流水表,业务仅仅只需要存放最近3个月的流水数据,三个月前的数据做归档即可,那么pt-archiver就可以轻松帮你完成这件事情,甚至你可以配置成自动任务,无需人工干预。

作为DBA,我们应该知其然更应该知其所以然,这样我们也能够放心地使用pt工具。相信很多DBA都研究过pt-online-schema-change的原理,那么今天我们深入刨一刨pt-archiver的工作原理。

一、原理观察

土人有土办法,我们直接开启general log来观察pt-archiver是如何完成归档的。

命令

pt-archiver --source h=127.0.0.1,u=xucl,p=xuclxucl,P=3306,D=xucl,t=t1 --dest h=127.0.0.1,P=3306,u=xucl,p=xuclxucl,D=xucl_archive,t=t1 --progress 5000 \

--statistics --charset=utf8mb4 --limit=10000 --txn-size 1000 --sleep 30

常用选项

--analyze

指定工具完成数据归档后对表执行'ANALYZE TABLE'操作。指定方法如'--analyze=ds',s代表源端表,d代表目标端表,也可以单独指定。

--ask-pass

命令行提示密码输入,保护密码安全,前提需安装模块perl-TermReadKey。

--buffer

指定缓冲区数据刷新到选项'--file'指定的文件并且在提交时刷新。

只有当事务提交时禁用自动刷新到'--file'指定的文件和刷新文件到磁盘,这意味着文件是被操作系统块进行刷新,因此在事务进行提交之前有一些数据隐式刷新到磁盘。默认是每一行操作后进行文件刷新到磁盘。

--bulk-delete

指定单个语句删除chunk的方式来批量删除行,会隐式执行选项'--commit-each'。

使用单个DELETE语句删除每个chunk对应的表行,通常的做法是通过主键进行逐行的删除,批量删除在速度上会有很大的提升,但如果有复杂的'WHERE'条件就可能会更慢。

--[no]bulk-delete-limit

默认值:yes

指定添加选项'--bulk-delete'和'--limit'到进行归档的语句中。

--bulk-insert

使用LOAD DATA LOCAL INFILE的方法,通过批量插入chunk的方式来插入行(隐式指定选项'--bulk-delete'和'--commit-each')

而不是通过逐行单独插入的方式进行,它比单行执行INSERT语句插入的速度要快。通过隐式创建临时表来存储需要批量插入的行(chunk),而不是直接进行批量插入操作,当临时表中完成每个chunk之后再进行统一数据加载。为了保证数据的安全性,该选项会强制使用选项'--bulk-delete',这样能够有效保证删除是在插入完全成功之后进行的。

--channel

指定当主从复制环境是多源复制时需要进行归档哪个主库的数据,适用于多源复制中多个主库对应一个从库的情形。

--charset,-A

指定连接字符集。

--[no]check-charset

默认值:yes

指定检查确保数据库连接时字符集和表字符集相同。

--[no]check-columns

默认值:yes

指定检查确保选项'--source'指定的源端表和'--dest'指定的目标表具有相同的字段。

不检查字段在表的排序和字段类型,只检查字段是否在源端表和目标表当中都存在,如果有不相同的字段差异,则工具报错退出。如果需要禁用该检查,则指定'--no-check-columns'。

--check-slave-lag

指定主从复制延迟大于选项'--max-lag'指定的值之后暂停归档操作。默认情况下,工具会检查所有的从库,但该选项只作用于指定的从库(通过DSN连接方式)。

--check-interval

默认值:1s

如果同时指定了选项'--check-slave-lag',则该选项指定的时间为工具发现主从复制延迟时暂停的时间。每进行操作100行时进行一次检查。

--columns,-c

指定需要归档的表字段,如有多个则用','(逗号)隔开。

--commit-each

指定按每次获取和归档的行数进行提交,该选项会禁用选项'--txn-size'。

在每次获取表数据并进行归档之后,在获取下一次数据和选项'--sleep'指定的休眠时间之前,进行事务提交和刷新选项'--file'指定的文件,通过选项'--limit'控制事务的大小。

--host,-h

指定连接的数据库IP地址。

--port,-P

指定连接的数据库Port端口。

--user,-u

指定连接的数据库用户。

--password,-p

指定连接的数据库用户密码。

--socket,-S

指定使用SOCKET文件连接。

--databases,-d

指定连接的数据库

--source

指定需要进行归档操作的表,该选项是必须指定的选项,使用DSN方式表示。

--dest

指定要归档到的目标端表,使用DSN方式表示。

如果该选项没有指定的话,则默认与选项'--source'指定源端表为相同表。

--where

指定通过WHERE条件语句指定需要归档的数据,该选项是必须指定的选项。不需要加上'WHERE'关键字,如果确实不需要WHERE条件进行限制,则指定'--where 1=1'。

--file

指定表数据需要归档到的文件。使用类似MySQL DATE_FORMAT()格式化命名方式。

文件内容与MySQL中SELECT INTO OUTFILE语句使用相同的格式,文件命名选项如下所示:

%Y:年,4位数(Year, numeric, four digits)

%m:月,2位数(Month, numeric (01..12))

%d:日,2位数(Day of the month, numeric (01..31))

%H:小时(Hour (00..23))

%i:分钟(Minutes, numeric (00..59))

%s:秒(Seconds (00..59))

%D:数据库名(Database name)

%t:表名(Table name)

二、原理解析

根据general log的输出,我们整理出时序表格如下

三、其他说明

咋一看这个过程貌似也没有什么问题,但是,假如在原表扫描出数据,插入到新表的过程中,旧数据发生了变化怎么办?

带着这个疑问,我们进行了源码的跟踪,我们在pt-archiver的6839行打上了断点

然后我分别在几个session窗口做了如下动作

最后pt-archiver输出如下:

# A software update is available:

TIME ELAPSED COUNT

2020-04-08T09:13:21 0 0

2020-04-08T09:13:21 0 1

Started at 2020-04-08T09:13:21, ended at 2020-04-08T09:13:51

Source: A=utf8mb4,D=xucl,P=3306,h=127.0.0.1,p=...,t=t1,u=xucl

Dest: A=utf8mb4,D=xucl_archive,P=3306,h=127.0.0.1,p=...,t=t1,u=xucl

SELECT 1

INSERT 1

DELETE 1

Action Count Time Pct

sleep 1 30.0002 99.89

inserting 1 0.0213 0.07

commit 2 0.0080 0.03

select 2 0.0017 0.01

deleting 1 0.0005 0.00

other 0 0.0008 0.00

很明显,id=3这条记录并没有进行归档(我们这里是改了条件列,实际生产中可能是更改了其他列,造成归档数据不准确)

那么如何来解决这种情况的发生呢?

显然,数据库在数据库中可以通过加排它锁来防止其他程序修改对应的数据,pt-archiver其实早就已经帮我们考虑到了这样的情况,pt-archiver提供了两种选择

--for-update:Adds the FOR UPDATE modifier to SELECT statements

--share-lock:Adds the LOCK IN SHARE MODE modifier to SELECT statements

四、总结

pt-archiver作为归档工具无疑是MySQL DBA日常运维的大利器之一,在使用过程中在知道如何使用的基础上也能够知晓其原理

归档过程中最好能对归档记录进行加锁操作,以免造成归档数据不准确

在主从环境中,归档过程最好控制速度,以免造成主从延迟

尽量控制好chunk的大小,不要过大,造成大事务

可以。

无论是查资料还是看视频,大数据已经记录了你的一切行踪。

大数据(big data),或称巨量资料,指的是所涉及的资料量规模巨大到无法通过目前主流软件工具,在合理时间内达到撷取、管理、处理、并整理成为帮助企业经营决策更积极目的的资讯。(在维克托·迈尔-舍恩伯格及肯尼斯·库克耶编写的《大数据时代》中,大数据指不用随机分析法(抽样调查)这样的捷径,而采用所有数据的方法)大数据的25V特点:Volume(大量)、Velocity(高速)、Variety(多样)、veracity(真实性)。大数据需要特殊的技术,包括大规模并行处理(MPP)数据库、数据挖掘电网、分布式文件系统、分布式数据库、云计算平台、互联网和可扩展的存储系统。

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理,本文部分文字与图片资源来自于网络,转载此文是出于传递更多信息之目的,若有来源标注错误或侵犯了您的合法权益,请立即通知我们,情况属实,我们会第一时间予以删除,并同时向您表示歉意,谢谢!

图片声明:本站部分配图来自人工智能系统AI生成,国外stocksnap摄影无版权图库。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

内容声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。部分内容参考包括:(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供参考使用,不准确地方联系删除处理!本站为非盈利性质站点,本着为中国外贸事业出一份力,发布内容不收取任何费用也不接任何广告!
 

  • 热门焦点
  • 南昌的邮政编码是多少

    南昌的邮政编码是330000。南昌市,江西省省会,江西省的政治、经济、文化、科技中心。地处江西中部偏北,介于东经115°27'至116°35'、北纬28°10'至 29°11'之间。东连余干、东乡,南接临川、丰城、西靠高安、奉新、靖安,北与永修、都昌、鄱阳三县共鄱阳湖;属亚热带季风湿润气候
    09-08
  • 韵达快递全国收费标准

    1、广东省内:首重8元/KG、续重2元/KG。2、江苏、浙江、上海、北京、福建、首重10元/KG、续重4元/KG。3、天津、重庆、安徽、广西、贵州、海南、河北、河南、湖北、湖南、江西、山东、山西、陕西、四川、云南、首重12元/KG、续重5元每/KG。4、甘肃、黑龙江、吉林、辽宁、宁
    08-17
  • 上海到广州快递费用多少钱呢?

    寄快递的收费标准一般都是按照体积或者重量来进行收费,不同的快递收费是不一样的,收费标准都是按照通用体积计算公式:重量(kg)=长(cm)×宽(cm)×高(cm)÷5000。以顺丰为例:顺丰快递在全国实行统一的收费标准,寄件同城10元,省内12元,省外20元。此价格均为首件起步价,如果超重需要
    08-18
  • 顺丰寄件的时候是怎么付款的呢?

    寄方付,收方付,第三方付意思如下:1、寄方付:就是寄东西的一方付钱 ,一般要先交钱。2、收方付:就是收东西那个人付 ,这个一般是等货到了之后收货人付款,也就是到付。3、第三方付:就是找了一个机构或者代理付钱的,即不是寄的人又不是收的人付款的统称为第三方付款。扩展资料顺丰速运
    08-17
  • 新疆的南疆和北疆分别为哪些市县?

    1.南疆:喀什,图木舒克,阿克苏,阿拉尔,和田,铁门关,昆玉,克孜勒苏柯尔克孜自治州,巴音郭楞蒙古自治州。2.北疆:乌鲁木齐,克拉玛依,阿勒泰地区,塔城地区,昌吉,石河子,北屯,可克达拉,伊犁,博尔塔拉。3.新疆的地理特征是“三山夹两盆”,新疆最北部为阿尔泰山,中部为天山,最南部为昆仑山系。阿尔泰山
    08-23
  • 北京朝阳区的所有外企

    朝阳区的外企,你只有一个个在工商局去查,以下是我整理的北京的一些外企资料,前面 一个是所有500强公司在北京的具体名字,但地址什么的就没了,哪些在朝阳我不确定。后面是整个北京知名外企的名单,但其中其实很多都不知名,呵呵。=====北京500强名单:制药:拜耳医药保健有限公司拜耳(
    09-03
  • 淘宝的优缺点?

    优点:1、开店方便快捷。淘宝有着丰富的网商服务经验,这里提供了最高效的开店解决方案。只要你有一定的互联网知识,有货源,搭配一台智能手机手机就可以拥有自己的店铺。淘小铺的装修更加方便简单,店铺目前有三种装修模板供卖家使用,只需要一键设置就可以更换成自己喜欢的模板。
    08-18
  • 顺丰拒签运费谁承担

    顺丰到付件被拒签邮费由卖方承担。1.现在很多卖家为了降低买家的购物风险和容易成交,给予买家全额到付的,既然卖家同意全额货到付款,那么这个送货的运费是由卖家支付。2.如果买家拒签拒收的,快递公司会先联系卖家立刻给买家沟通,沟通不成功的,快递公司会给卖家退回商品,这时会产
    08-17
  • 新疆阿拉尔市阿拉尔市邮编

    新疆维吾尔自治区 阿拉尔市 843300阿拉尔市,是新疆维吾尔自治区直辖的县级市,北起天山南麓山地,南至塔克拉玛干沙漠边缘,东临沙雅县,西抵柯坪县,傍依阿克苏河、塔里木河、台兰河、多浪河水系。地理坐标为东经80°30′至81°58′,北纬40°22′至40°57′之间。东邻沙雅县,西依阿
    09-03
  • 怎么算快递运费,多少钱一公斤?

    规则物品:长(cm)×宽(cm)×高(cm)÷6000=重量(KG)不规则物品:最长(cm)×最宽(cm)×最高(cm) ÷6000=重量(KG)普通快递都有带电子秤,1公斤以内算首重,1公斤以外算续重,一般续重比首重便宜2元,只计重量不计体积,8~12元起价。当然实在太大的东西他们也会按体积算。个别快递走空运的算体积和
    08-18
  • 偏远地区运费一般设置为多少

    12元-15元。根据查询国家市场监管部门发布的公告得知:偏远地区运费一般设置为12元-15元之间。偏远地区,就是超出各快递公司服务区的目的地 ,偏远地区大部分指的是新疆,西藏,甘肃,宁夏,青海,内蒙古,这六个省份。
    08-17
  • 对外贸易依存度怎么计算?

    对外贸易依存度的计算公式 如下: ? ? ? ? ? ? ? ?对外贸易依存度=一国进口+出口总额/国内生产总值出口(进口)依存度:即一国出口总额进口/其国内生产总值(关于对外贸易依存度的相
    08-11
  • 顺丰收件人的付款方式寄付现结和到付分别是什么意思?

    寄付现结就是寄件人寄件时支付运费。到付就是邮件到达目的地后由收件人支付运费。扩展资料还有一种付款方式叫货到付款业务流程1、卖家:等取货的来,来了以后告诉他货到付款(有的物流不支持,但是货运可以的)然后他会告诉你钱送到你手的大概时间(有的不说,你要自己问),货到付款对卖
    08-18
  • 深圳外贸尾货批发市场在哪里

    振中三街。深圳外贸尾货批发市场位于深圳市福田区振中三街,是一个以时装为主的市场。深圳外贸尾货批发市场由宏裕集团股份有限公司与深圳市共同投资新建的批发城。是珠江三角
    08-11
  • 顺丰从广东发到山东要多久?大约多少钱

    顺丰快递从广东(州)市到山东(济南)最快需要3天时间。山东和广东两个都是省名,不是地名,按从山东(济南)到广东(州)有1820公里左右,以经是很远了,但现在的高速路很发达,加上顺风是国内知名品牌快递单位,很快的。广东省到山东顺丰快递首重22元,续重1.1-50kg续重14元。50.1-100kg续重12元;100
    08-17