MySql教程

RDS for MySQL之pt-online-schema-change工具使用

本文主要是介绍RDS for MySQL之pt-online-schema-change工具使用,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

##工具介绍:
pt-online-schema-change是percona toolkit工具箱功能之一,主要是在避免锁表的情况下做增加/删除字段等DDL操作。
大概原理是新建一个表,并且这个表已经是最新的表结构,
从旧表往新表insert数据,同时会在旧表上创建增删改三个触发器,旧表上所有增删改操作会插入到新表,最后新表旧表做换名操作。

【注意事项】
**要操作的表必须有主键**
**会有一定概率发生死锁,如一直有死锁发生建议使用Gh-ost软件**

##1、安装
参考官方文档
https://www.percona.com/downloads/percona-toolkit/LATEST/

##2、使用
pt-online-schema-change --help
可以查看到该命令的参数列表

先介绍几个常用参数
h=:指定主机名
P=:指定主机端口
u=:指定数据库用户名
p=:指定数据库密码
--execute:确定修改表
--alter:要执行的语句
--no-version-check:不检查版本信息

--recursion-method:Mater寻找Slave的方法,在RDS中使用需要设置为none
着重介绍一下这个参数,因为pt-online-schema-change这个工具默认会检测主从延迟,而RDS用户看到的都是逻辑IP,PT工具通过show slave status;获取到Slave的IP,这个IP是物理机IP,所以PT工具连接这个IP网络会不通,导致使用PT工具一直卡住很长时间;设置为none,不检测主从延迟。

##3、示例
###创建测试环境:
cretae database ceshi;
use ceshi;
create table (t1 id int primary key);

###执行添加字段name列
pt-online-schema-change --no-version-check --execute --recursion-method=none --alter "add column name varchar(200)" h=xxx.mysql.zhangbei.rds.aliyuncs.com,P=3306,u=root,p=xxx,D=ceshi,t=t1


###输出日志如下:
No slaves found. See --recursion-method if host a48c13173.cloud.na62 has slaves.
Not checking slave lag because no slaves were found and --check-slave-lag was not specified.
Operation, tries, wait:
analyze_table, 10, 1
copy_rows, 10, 0.25
create_triggers, 10, 1
drop_triggers, 10, 1
swap_tables, 10, 1
update_foreign_keys, 10, 1
Altering `ceshi`.`t1`...
Creating new table...
Created new table ceshi._t1_new OK.
Altering new table...
Altered `ceshi`.`_t1_new` OK.
2019-09-15T09:57:30 Creating triggers...
2019-09-15T09:57:31 Created triggers OK.
2019-09-15T09:57:31 Copying approximately 1 rows...
2019-09-15T09:57:31 Copied rows OK.
2019-09-15T09:57:31 Analyzing new table...
2019-09-15T09:57:31 Swapping tables...
2019-09-15T09:57:31 Swapped original and new tables OK.
2019-09-15T09:57:31 Dropping old table...
2019-09-15T09:57:31 Dropped old table `ceshi`.`_t1_old` OK.
2019-09-15T09:57:31 Dropping triggers...
2019-09-15T09:57:31 Dropped triggers OK.
Successfully altered `ceshi`.`t1`.

###Successfully 结尾代表执行成功。

##4、常用指南
1、添加字段:
pt-online-schema-change --no-version-check --execute --recursion-method=none --alter "add column name varchar(200)" h=xxx.mysql.zhangbei.rds.aliyuncs.com,P=3306,u=root,p=xxx,D=ceshi,t=t1

2、删除字段:
pt-online-schema-change --no-version-check --execute --recursion-method=none --alter "drop column name" h=xxx.mysql.zhangbei.rds.aliyuncs.com,P=3306,u=root,p=xxx,D=ceshi,t=t1

3、修改字段类型
pt-online-schema-change --no-version-check --execute --recursion-method=none --alter "modify name varchar(300)" h=xxx.mysql.zhangbei.rds.aliyuncs.com,P=3306,u=root,p=xxx,D=ceshi,t=t1

4、创建索引
pt-online-schema-change --no-version-check --execute --recursion-method=none --alter "add key idx_name (name)" h=xxx.mysql.zhangbei.rds.aliyuncs.com,P=3306,u=root,p=xxx,D=ceshi,t=t1

5、删除索引
pt-online-schema-change --no-version-check --execute --recursion-method=none --alter "drop key idx_name" h=xxx.mysql.zhangbei.rds.aliyuncs.com,P=3306,u=root,p=xxx,D=ceshi,t=t1

6、碎片整理,释放空间
pt-online-schema-change --no-version-check --execute --recursion-method=none --alter "engine=innodb" h=xxx.mysql.zhangbei.rds.aliyuncs.com,P=3306,u=root,p=xxx,D=ceshi,t=t1

##总结
除了--alter部分内容是变动的,其它参数内容都是固定的;

这篇关于RDS for MySQL之pt-online-schema-change工具使用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!