RDS for MySQL 如何使用 Percona Toolkit
Percona Toolkit 包含多种用于 MySQL 数据库管理的工具。
下面介绍常用的 pt-online-schema-change 和 pt-archiver 搭配 RDS MySQL 的使用方法。
注:
- pt-online-schema-change 和 pt-archiver 工具均须指定 --no-version-check 选项方能搭配 RDS MySQL 实例使用。
- 本文样例使用 Percona Toolkit 2.2.17 版本测试。
- 本文样例仅做为样例使用,不承担任何因此示范导致的问题责任。具体操作手册请参考 Percona Toolkit 的相关文档。
1. pt-online-schema-change
pt-online-schema-change 提供在线修改表结构等功能,搭配 RDS for MySQL 5.5 使用可以避免在修改表结构的过程中阻塞应用对表数据的访问。
由于 RDS MySQL 5.6 支持 online-ddl 功能,可以直接在业务低峰期进行操作,也可以结合 pt-online-schema-change 使用。
注:
- 无论 RDS MySQL 5.5 还是 5.6 版本,也无论是否使用 pt-online-schema-change,在修改表结构过程中都有可能遇到等待表元数据锁的情况(waiting for table metadata lock)。如果出现这种情况,请参考 RDS MySQL 表上 Metadata lock 的产生和处理
- 表及数据维护操作请在业务低峰期进行。
样例用表:
CREATE TABLE `x` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`password` varchar(10) DEFAULT NULL,
`recommend_level` double(5,0) DEFAULT NULL,
`name` varchar(30) DEFAULT '101' COMMENT 'change',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4;
1.1 增加字段
pt-online-schema-change --no-version-check --execute --alter "add column c1 int" h=xxx.mysql.rds.aliyuncs.com,P=3306,u=jacky,p=xxx,D=jacky,t=x
# h=xxx.mysql.rds.aliyuncs.com -- RDS 实例地址
# P=3306 -- RDS 实例端口
# u=jacky -- RDS 实例用户
# p=xxx -- RDS 实例用户密码
# D=jacky -- RDS 实例数据库
# t=x -- RDS 实例表名称


1.2 删除字段
pt-online-schema-change --no-version-check --execute --alter "drop column c1" h=xxx.mysql.rds.aliyuncs.com,P=3306,u=jacky,p=xxx,D=jacky,t=x

1.3 修改字段类型
pt-online-schema-change --no-version-check --execute --alter "modify column c1 bigint unsigned" h=xxx.mysql.rds.aliyuncs.com,P=3306,u=jacky,p=xxx,D=jacky,t=x

1.4 添加索引
pt-online-schema-change --no-version-check --execute --alter "add key idx_c1 (c1)" h=xxx.mysql.rds.aliyuncs.com,P=3306,u=jacky,p=xxx,D=jacky,t=x

1.5 删除索引
pt-online-schema-change --no-version-check --execute --alter "drop key idx_c1" h=xxx.mysql.rds.aliyuncs.com,P=3306,u=jacky,p=xxx,D=jacky,t=x

2. pt-archiver
pt-archiver 是 Percona 官方提供的归档工具,用于归档大型表中的记录到另一个表或文件。
样例用表:
CREATE TABLE `my_tab` (
`id` bigint(11) NOT NULL AUTO_INCREMENT,
`areaID` varchar(50) DEFAULT NULL,
`area` varchar(60) DEFAULT NULL COMMENT '中文注释测试',
`father` varchar(12) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_area` (`area`)
) ENGINE=InnoDB AUTO_INCREMENT=3162 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT KEY_BLOCK_SIZE=8;
2.1 归档到操作系统文件
pt-archiver --source h=xxx.mysql.rds.aliyuncs.com,P=3306,u=jacky,p=xxx,D=jacky,t=my_tab --charset=utf8 --file '/var/tmp/%Y-%m-%d-%D.%t' --where "id > 3008" --limit 1000 --commit-each --no-version-check
# h=xxx.mysql.rds.aliyuncs.com -- RDS 实例地址
# P=3306 -- RDS 实例端口
# u=jacky -- RDS 实例用户
# p=xxx -- RDS 实例用户密码
# D=jacky -- RDS 实例数据库
# t=my_tab -- RDS 实例表名称
# --source -- 指定要被归档的数据源
# --charset=utf8 -- 使用的字符集,需与表字符集一致;否则指定 --no-check-charset 参数
# --file -- 指定目标操作系统文件名
# --where "id > 3008" -- 指定 where 过滤条件,过滤出要归档的数据
# --limit 1000 -- 每条语句读取和归档的数据行数,默认是 1
# --commit-each -- 每次获取和归档数据后,commit提交
# --no-version-check -- 不做版本检查,RDS MySQL 必须设置
归档后,源表数据减少 150 行。

归档操作系统文件中,包含 150 行数据。

2.2 归档到另外一个表中
可以将数据归档到同实例不同库下的表中,也可以将数据归档到不同实例下的表中。
归档操作前,目标表要存在。
2.2.1 归档到同实例不同库下的表
pt-archiver --source h=rds01.mysql.rds.aliyuncs.com,P=3306,u=jacky,p=xxx,D=jacky,t=my_tab --charset=utf8 --dest h=rds01.mysql.rds.aliyuncs.com,P=3306,u=jacky,p=xxx,D=my_db,t=my_tab --where "id > 2000" --limit 1000 --commit-each --no-version-check
# --dest -- 指定归档到的目标表
目标表中增加了 1008 行数据。

源表中减少了 1008 行数据,剩余 2000 行数据。

2.2.2 归档到不同实例下的表
pt-archiver --source h=rds01.mysql.rds.aliyuncs.com,P=3306,u=jacky,p=xxx,D=jacky,t=my_tab --charset=utf8 --dest h=rds02.mysql.rds.aliyuncs.com,P=3306,u=jacky,p=xxx,D=jacky,t=my_tab --where "id > 500" --limit 1000 --commit-each --no-version-check
目标表中增加了 1500 行数据。

源表中减少了 1500 行数据,剩余 500 行数据。

2.2.3 通过 bulk insert 加速归档过程
当需要归档的数据量很大,比如第一次做归档的时候,可以考虑通过尝试 bulk insert 的方式来加速归档过程。
pt-archiver --source h=rds01.mysql.rds.aliyuncs.com,P=3306,u=jacky,p=xxx,D=rd_test,t=large_tab_04 --charset=utf8 --dest h=rds02.mysql.rds.aliyuncs.com,P=3306,u=jacky,p=xxx,D=jacky,t=large_tab_04 --where "1=1" --limit 5000 --commit-each --bulk-insert --no-version-check --statistics
# --bulk-insert -- 批量插入数据,会自动启用 --bulk-delete --commit-each,每次插入行数通过--limit 选项指定
# --statistics -- 显示 pt-archiver 本次操作的统计信息。
实际示例:
pt-online-schema-change --no-version-check --execute --charset=utf8mb4 --alter " ADD COLUMN remarkName VARCHAR(50) DEFAULT NULL COMMENT '备注名称' AFTER followCount" h=127.0.0.1,P=,u=root,p=zh****456,D=deep_fashion_test,t=tb_blogger_tag pt-online-schema-change --no-version-check --execute --charset=utf8mb4 --alter " ADD COLUMN registerType tinyint(4) DEFAULT 0 COMMENT '注册类型,0-未指定/1-手机号/2-微信' AFTER registChannel" h=127.0.0.1,P=,u=root,p=zh****6,D=deep_fashion_test,t=tb_users
pt-online-schema-change --no-version-check --execute --charset=utf8mb4 --alter "MODIFY COLUMN updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP " h=rm-bp1pj******8431j1.mysql.r.com,P=3306,u=zhi***min,p=Zh**pspdk82,D=ks_l***spider,t=ks_live_****minute
pt-online-schema-change --no-version-check --execute --charset=utf8mb4 --alter " add COLUMN gender varchar(10) NOT NULL DEFAULT '' COMMENT '性别'" h=rm-*****2188.mysql.rds.aliyuncs.com,P=3306,u=zhi***min,p=Z****2,D=spider,t=pop_patte****new
执行命令后会有长时间的卡顿等待,需要等待会有相应执行的日志打印出来。
RDS for MySQL 如何使用 Percona Toolkit的更多相关文章
- Percona Toolkit mysql辅助利器
1 PT介绍 Percona Toolkit简称pt工具—PT-Tools,是Percona公司开发用于管理MySQL的工具,功能包括检查主从复制的数据一致性.检查重复索引.定位IO占用高的表文件.在 ...
- Percona Toolkit工具连接MySQL 8报错的解决方案
使用Percona Toolkit的工具连接MySQL 8.x数据库时,会遇到类似"failed: Plugin caching_sha2_password could not be loa ...
- Percona Toolkit工具使用
Percona Toolkit简称pt工具-PT-Tools,是Percona公司开发用于管理MySQL的工具,功能包括检查主从复制的数据一致性.检查重复索引.定位IO占用高的表文件.在线DDL等 下 ...
- Centos 安装Percona Toolkit工具集
1.下载 下载地址: https://www.percona.com/downloads/percona-toolkit/LATEST/ [root@bogon ~]# wget https:// ...
- Percona Toolkit工具集介绍
部署mysql工具是一个非常重要的部分,所以工具的可靠性和很好的设计非常重要.percona toolkit是一个有30多个mysql工具的工具箱.兼容mysql,percona server,mar ...
- MySQL Study之--Percona Server版本号
MySQL Study之--Percona Server版本号 1.简单介绍 Percona 为 MySQL 数据库server进行了改进.在功能和性能上较 MySQL 有着非常显著的提升. ...
- Want to archive tables? Use Percona Toolkit’s pt-archiver--转载
原文地址:https://www.percona.com/blog/2013/08/12/want-to-archive-tables-use-pt-archiver/ Percona Toolkit ...
- 阿里云RDS for MySQL 快速入门——笔记
1初始化配置 1.1设置白名单 创建RDS实例后,需要设置RDS实例的白名单,以允许外部设备访问该RDS实例.默认的白名单只包含默认IP地址127.0.0.1,表示任何设备均无法访问该RDS实例. 设 ...
- rds 与mysql 进行主从同步
.rds上默认会有server-****,只需要配置从数据库: .从数据库的配置流程: .[mysqld] log-bin = mysql-bin-changelog #要和主库中的名字一样 rela ...
随机推荐
- IndiaHacks 2016 - Online Edition (Div. 1 + Div. 2) C. Bear and Up-Down 暴力
C. Bear and Up-Down 题目连接: http://www.codeforces.com/contest/653/problem/C Description The life goes ...
- [原]Redis使用场景及使用经验
Redis is an open source (BSD licensed), in-memory data structure store! 欢迎转载,转载请注明出处 刚刚结束一个游戏类的活动项目, ...
- 参加SAP VT项目有感
凡事预则立,不预则废. 没有接到录取电话还是有些悲伤的,虽然知道最终被录取的可能性不大,但是之前还是抱着一丝期望的,毕竟是自己的处女面,就这么以失败的结果结束了. 从最开始的投递简历,到后来的电话面试 ...
- 帝国cms安装在二级目录 构建中英文网站
帝国cms是很好的建站工具,一般都是安装在根目录,但是有时候租一个空间,要搭建两个网站,或者中英文双语的网站,肯定得用到二级目录 帝国cms安装二级目录步骤 1,讲安装包解压缩到要安装的二级目录下 2 ...
- vue获取当前v-for里当前点击元素
app.vue <template> <div id="app"> <ul > <li v-for="(item,index) ...
- JS学习笔记-事件绑定
一.传统事件模型 传统事件模型中存在局限性. 内联模型以HTML标签属性的形式使用,与HTML混写.这样的方式无疑造成了改动以及扩展的问题,已经非常少使用了. 脚本模型是将事件处理函数写到js文件里, ...
- 2014 百度之星 题解 1004 Labyrinth
Problem Description 度度熊是一仅仅喜欢探险的熊,一次偶然落进了一个m*n矩阵的迷宫,该迷宫仅仅能从矩阵左上角第一个方格開始走,仅仅有走到右上角的第一个格子才算走出迷宫,每一次仅仅能 ...
- Storm和Spark Streaming框架对比(转)
原文链接:Storm和Spark Streaming框架对比 Storm和Spark Streaming两个都是分布式流处理的开源框架.但是这两者之间的区别还是很大的,正如你将要在下文看到的. 处理模 ...
- IE系列不支持圆角等CSS3属性的解决方案
IE系列浏览器不支持CSS的圆角(border-radius)等CSS3属性是一个众所周知的问题,而FF.Chrome原生的浏览器支持是的优雅的圆角感觉较好,如何解决这个问题呢? 一种比较传统的方案是 ...
- SQL INTERSECT
SQL INTERSECT is query that allows you to select related information from 2 tables, this is combine ...