mysql大表重定义


mysql5.6以后的版本,小表直接操作表结构变更即可,如果是大表,那么就避免直接操作,就要使用pt-online-schema-change
工作原理:
原理跟oracle的在线冲定义类似,创建一个和你要执行alter操作的表一样的空表结构,执行表结构修改,然后从原表中copy原始数据到表结构修改后的表,当数据copy完成以后就会将原表移走,
用新表代替原表,默认动作是将原表drop掉。在copy数据的过程中,任何在原表的更新操作都会更新到新表,因为这个工具在会在原表上创建触发器,
触发器会将在原表上更新的内容更新到新表。如果表中已经定义了触发器这个工具就不能工作了。

注意点:
1、操作的表必须有主键或唯一索引否则报错。
2、如果表有外键,除非使用 --alter-foreign-keys-method 指定特定的值,否则工具不予执行。
3、当业务量较大时,修改操作会等待没有数据修改后,执行最后的rename操作。因此,在修改表结构时,应该尽量选择在业务相对空闲时,至少修改表上的数据操作较低时,执行较为妥当。
4、由于可能存在一定的风险,在操作之前,建议对数据表进行备份,可以使得操作更安全、可靠。
5、当是主从环境,不在乎从的延迟,则需要加--recursion-method=none参数。当需要尽可能的对服务产生小的影响,则需要加上--max-load参数。
-- 添加列
[root@centos7 pscripts]# pt-online-schema-change -uroot -p123456 --alter='add column dt datetime' --execute D=test1,t=t1
-- 修改列类型
[root@centos7 pscripts]# pt-online-schema-change -uroot -p123456 --alter='modify column dt date' --execute D=test1,t=t1
-- 修改列名 谨慎操作
[root@centos7 pscripts]# pt-online-schema-change -uroot -p123456 --alter='change column dt dt1 date' --execute D=test1,t=t1 --no-check-alter
-- 删除列
[root@centos7 pscripts]# pt-online-schema-change -uroot -p123456 --alter='drop column  dt1 ' --execute D=test1,t=t1
-- 添加索引  show index from t1 \G;
[root@centos7 pscripts]# pt-online-schema-change -uroot -p123456 --alter='add key i_name(name) ' --execute D=test1,t=t1
-- 删除索引
[root@centos7 pscripts]# pt-online-schema-change -uroot -p123456 --alter='drop index i_name ' --execute D=test1,t=t1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

朝闻道-夕死可矣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值