术小能手 2017-11-29 10:18:01 浏览181 评论0 发表于: 老叶茶馆
mysql 日志 公有云 test charset uuid source statistics
摘要: 一、引言 最近由于业务需求,需要将公有云RDS(业务库)的大表数据归档至私有云MySQL(历史库),以缩减公有云RDS的体积和成本。 那么问题来了,数据归档的方式有n种,选择哪种呢?经过一番折腾,发现使用percona的pt-archiver就可以轻松并优雅地对MySQL进行数据归档。
7317b2bf9c910bcf1ecb7c629ead4ac2ad8d6df5
一、引言
最近由于业务需求,需要将公有云RDS(业务库)的大表数据归档至私有云MySQL(历史库),以缩减公有云RDS的体积和成本。
那么问题来了,数据归档的方式有n种,选择哪种呢?经过一番折腾,发现使用percona的pt-archiver就可以轻松并优雅地对MySQL进行数据归档。
待我娓娓道来~
1.1 pt-archive是啥
属于大名鼎鼎的percona工具集的一员,是归档MySQL大表数据的最佳轻量级工具之一。
注意,相当轻,相当方便简单。
1.2 pt-archive能干啥
清理线上过期数据;
导出线上数据,到线下数据作处理;
清理过期数据,并把数据归档到本地归档表中,或者远端归档服务器。
二、基本信息
2.1 MySQL环境
0943088ab6ea0b21de9535ace36fbe33c85b9dff
2.2 pt-archiver信息
a503ee9975545f14614ba196999d1767ec516057
2.3 归档表信息
aca6666fb35f4edd98f881c77e5b05b78ad84a9d
注意:pt-archiver操作的表必须有主键
d4c8f64a3e0ada4a2210dd5c690fa60663554d00
三、模拟场景
3.1 场景1-1:全表归档,不删除原表数据,非批量插入
pt-archiver \ --source h=10.73.129.187,P=3306,u=backup_user,p='xxx',D=test123,t=c1 \ --dest h=10.73.129.188,P=3306,u=backup_user,p='xxx',D=test123,t=c1 \ --charset=UTF8 --where '1=1' --progress 10000 --limit=10000 --txn-size 10000 --statistics --no-delete
f522591bb4ee06259c6c2b60eff97ada10d5f15d
3.2 场景1-2:全表归档,不删除原表数据,批量插入
pt-archiver \ --source h=10.73.129.187,P=3306,u=backup_user,p='xxx',D=test123,t=c1 \ --dest h=10.73.129.188,P=3306,u=backup_user,p='xxx',D=test123,t=c1 \ --charset=UTF8 --where '1=1' --progress 10000 --limit=10000 --txn-size 10000 --bulk-insert --bulk-delete --statistics --no-delete
ae7bb93984172b6abfb9e11224de271fc61ff093
3.3 场景2-1:全表归档,删除原表数据,非批量插入,非批量删除
pt-archiver \ --source h=10.73.129.187,P=3306,u=backup_user,p='xxx',D=test123,t=c1 \ --dest h=10.73.129.188,P=3306,u=backup_user,p='xxx',D=test123,t=c1 \ --charset=UTF8 --where '1=1' --progress 10000 --limit=10000 --txn-size 10000 --statistics --purge
d50354a4cf8086406b7fe1d9eefbe17debbd1700
3.4 场景2-2:全表归档,删除原表数据,批量插入,批量删除
pt-archiver \ --source h=10.73.129.187,P=3306,u=backup_user,p='xxx',,D=test123,t=c1 \ --dest h=10.73.129.188,P=3306,u=backup_user,p='xxx',D=test123,t=c1 \ --charset=UTF8 --where '1=1' --progress 10000 --limit=10000 --txn-size 10000 --bulk-insert --bulk-delete --statistics --purge
d98ed12f1a0deb91147e8830b7e7dc63afdf07f8
四、小结
4.1 性能对比
通过下表可以看出,批量操作和非批量操作的性能差距非常明显,批量操作花费时间为非批量操作的十分之一左右。
68d0ecbe4dd224e4f8c141fa8b5bc4afe3cf3cd1
场景2-1:全表归档,删除原表数据,非批量插入,非批量删除4.2 general log分析
从日志看起来,源库的查询和目标库的插入有先后顺序
从日志看起来,目标库的插入和源库的删除,并无先后顺序。在特定条件下,万一目标库插入失败,源库删除成功,咋搞?感觉这里并不十分严谨
删除采用DELETE FROM TABLE WHERE ... ,每次删除一行数据
插入采用INSERT INTO TABLE VALUES('...'),每次插入一行数据
源库general log:
set autocommit=0
批量查询(对应参数limit)
SELECT /*!40001 SQL_NO_CACHE */ `uuid` FORCE
INDEX(`PRIMARY`) WHERE (1=1) AND ((`uuid` >= '266431'))
ORDER BY `uuid` LIMIT 10000
3. 逐行删除
DELETE FROM `test123`.`c1` WHERE (`uuid` = '000002f0d9374c56ac456d76a68219b4')
4. COMMIT(对应参数--txn-size,操作数量达到--txn-size,则commit)
目标库general log:
set autocommit=0
逐行插入
INSERT INTO `test123`.`c1`(`uuid`) VALUES ('0436dcf30350428c88e3ae6045649659')
3. COMMIT(对应参数--txn-size,操作数量达到--txn-size,则commit)
场景2-2:全表归档,删除原表数据,批量插入,批量删除
从日志看起来,源库的批量查询和目标库的批量插入有先后顺序
从日志看起来,目标库的批量插入和源库的批量删除,并无先后顺序。
批量删除采用DELETE FROM TABLE WHERE ... LIMIT 10000
批量插入采用LOAD DATA LOCAL INFILE 'file' INTO TABLE ...
源库:
set autocommit=0
批量查询(对应limit参数)
SELECT /*!40001 SQL_NO_CACHE */ `uuid` FORCE
INDEX(`PRIMARY`) WHERE (1=1) AND ((`uuid` >= '266431'))
ORDER BY `uuid` LIMIT 10000
3. 批量删除
DELETE FROM `test123`.`c1` WHERE (((`uuid` >= '266432'))) AND (((`uuid` <= '273938'))) AND (1=1) LIMIT 10000
4. COMMIT(对应参数--txn-size,操作数量达到--txn-size,则commit)
目标库:
set autocommit=0
批量插入
LOAD DATA LOCAL INFILE '/tmp/vkKXnc1VVApt-archiver' INTO TABLE `test123`.`c1`CHARACTER SET UTF8(`uuid`)
3. COMMIT(对应参数--txn-size,操作数量达到--txn-size,则commit)
五、附录
常用参数
a2a6fa0100cd34c226f95c9649e9bdbb628fd115
原文发布时间为:2017-11-28
本文作者:蓝剑锋@知数堂
本文来自云栖社区合作伙伴“老叶茶馆”,了解相关信息可以关注“老叶茶馆”微信公众号
如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:yqgroup@service.aliyun.com 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
分享到:
相关推荐
Percona的`pt-archiver`是一款非常实用的MySQL数据库管理工具,主要用于高效地归档或迁移大数据表中的数据。这个重构版针对大型数据库环境优化了性能和稳定性,确保在处理海量数据时仍然能够保持高效运行。以下是...
axis2-eclipse-service-archiver-wizard.zip
共四个文件,都是最先版的,希望可以帮助大家。axis2-eclipse-service-archiver-wizard和axis2-eclipse-codegen-wizard和axis2-1.6.1-bin和axis2-1.6.1-war
### Archiver归档的使用 #### 一、概述 在iOS开发中,数据持久化是一项基本而重要的功能,其中一种常见的方法就是使用归档技术。归档是一种将对象转换为可存储或传输格式的过程,通常用于保存应用的状态或数据。在...
该项目包含的主要文件夹“archiver-master”可能包括以下内容: 1. `src/`:源代码目录,通常包含项目的主体代码,如核心功能实现、接口定义等。 2. `examples/`:示例代码,展示如何在实际项目中使用archiver库...
标题“axis2-eclipse-service-archiver-wizard”指的是Axis2在Eclipse集成开发环境(IDE)中的一个服务归档向导插件。这个插件是专门为MyEclipse Web服务开发设计的,它简化了创建和管理Axis2 Web服务的过程。 Axis...
maven项目转换为eclipse项目,可能缺少的包。
maven项目报错找不到 plexus-archiver-1.2.jar和xstream-1.3.1.jar,可以先下载放到相应位置 再update project
在前端开发中,数据的存储和传输有时需要将文件进行压缩,以便更高效地处理和传输。`Simple Archiver` 是一个专为前端设计的开源库,旨在简化这一过程。这个库支持对文件、目录、缓冲区、流以及字符串的多个条目进行...
Plexus Archiver组件的设计目标是提供一个统一的API来处理各种存档格式,使开发者可以方便地进行文件打包和解包,而无需关心底层实现的细节。 在plexus-archiver中,主要包含以下核心概念和功能: 1. **Archiver...
官方离线安装包,测试可用。请使用rpm -ivh [rpm完整包名] 进行安装
java运行依赖jar包
安全,可以对其进行数字签名,只让能够识别数字签名的用户使用里面的东西。 加快下载速度; 压缩,使文件变小,与ZIP压缩机制完全相同。 包封装。能够让JAR包里面的文件依赖于统一版本的类文件。 可移植性,能够...
- pt-archiver:用于删除旧的、不再需要的记录,同时把删除的记录归档到另一个表或文件中,以便于备份。 - pt-config-diff:用于比较两个MySQL实例的配置差异,帮助DBA管理不同服务器间的配置一致性。 - pt-deadlock...
安全,可以对其进行数字签名,只让能够识别数字签名的用户使用里面的东西。 加快下载速度; 压缩,使文件变小,与ZIP压缩机制完全相同。 包封装。能够让JAR包里面的文件依赖于统一版本的类文件。 可移植性,能够...
maven-archiver-3.5.2.jar
安全,可以对其进行数字签名,只让能够识别数字签名的用户使用里面的东西。 加快下载速度; 压缩,使文件变小,与ZIP压缩机制完全相同。 包封装。能够让JAR包里面的文件依赖于统一版本的类文件。 可移植性,能够...
数据库归档是数据管理中的一个重要环节...通过使用存储过程、事件调度器和第三方工具如pt-archiver,我们可以有效地实现数据归档。同时,通过合理的性能优化策略,我们可以确保归档操作的高效性和对业务影响的最小化。
《PyPI官网下载:torch_model_archiver-0.3.1-py2.py3-none-any.whl——Python库解析与应用》 PyPI(Python Package Index)是Python开发者的重要资源库,它为全球的Python开发者提供了丰富的第三方库,便于他们...