mysql之ptschema-change

mysql之ptschema-change,第1张

条件:

1,表格必须带有主键或者唯一索引

1, 原理

1.1 检查表是否带有主键或者唯一索引,show create table test

1.2 创建新表,create table _test_new

1.3 变更新表,alter table _test_new

1.4 在原表上创建 insert、update、delete 三种类型的触发器;

1.5 将旧表的数据拷贝到新表中,同时通过触发器将旧表中的 *** 作映射到新表;

1.6 将新表替换原表,rename 表名,RENAME TABLE `testdb`.`test` TO `testdb`.`_test_old`, `testdb`.`_test_new` TO `testdb`.`test`

1.7 删除旧表(可以根据选项来控制是否删除旧表)

1.8 删除新表上的删除、更新、插入 触发器

2, 使用场景

2.1 亿级大表在线不锁表变更字段与索引

3,pt-online-schema-change安装

yum install perl-DBI

yum install perl-DBD-MySQL

yum install perl-Time-HiRes

yum install perl-IO-Socket-SSL

4,pt-online-schema-change使用

选项:

示例:

1, 添加列

2, 删除列

3, 添加索引

4, 删除索引

5, 修改字段长度

6,重建表

7, 修改自增ID为bigint

8 添加字段

9 修改字段

10 删除字段

11 添加索引

12 删除索引

13 修改字段为null/not null

# 改为null

# 改为 not null

14 添加主键

15 删除主键

16 重建表

17 保留变更的新旧表

# 保留旧表

# 保留新表,

优势:

1,降低主从延时的风险

2,可以限速、限资源,避免 *** 作时MySQL负载过高

建议:

1,在业务低峰期做,将影响降到最低

假设你的表名是“manager”,现自增主键列名是“id”,另有一列名为“user_id",现在要把现有主键“id”取消主键约束,更改为新主键“user_id”,那么用pt工具更改命令如下:

/usr/bin/pt-online-schema-change --user=root --host=127.0.0.1 --port=3306 --charset=utf8 --nodrop-old-table --alter="change id id int(10), drop primary key, modify user_id int auto_increment primary key" D=数据库名,t=manager --exec

说明:以上第一步取消原自增主键‘id’的自增属性(否则无法修改),第二步drop主键约束,第三步将user_id设置为新主键。

注:如表上有触发器则不可使用此pt工具。

使用完毕会产生一个“manager_old”表,这是原表备份,以便更改失误后回退,务必确认更改无误后删除。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5901035.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-07
下一篇 2023-03-07

发表评论

登录后才能评论

评论列表(0条)

保存