数据库中pt-online-schema-change的示例分析
admin
2023-06-09 14:41:45
0次
#!/bin/bash


#运行该脚本需要更改2个地方:第一个是基本信息;第二个是--alter
#基本信息(需要更改)

user='xxx'
password='xxx'  
host='xxx'
port=xxxx
D='xxx'
t='xxx'


#--alter(需要更改)
#--------------example----------------
# 1.增加字段
# pt-online-schema-change --user=$user --password=$password --host=$host --port=$port  --alter "ADD COLUMN content text" D=$D,t=$t --no-check-replication-filters --alter-foreign-keys-method=auto --recursion-method=none --print --execute
# 
# 2.删除字段
# pt-online-schema-change --user=$user --password=$password --host=$host --port=$port  --alter "DROP COLUMN content " D=$D,t=$t --no-check-replication-filters --alter-foreign-keys-method=auto --recursion-method=none --quiet --execute
# 
# 3.修改字段
# pt-online-schema-change --user=$user --password=$password --host=$host --port=$port  --alter "MODIFY COLUMN age TINYINT NOT NULL DEFAULT 0" D=$D,t=$t --no-check-replication-filters --alter-foreign-keys-method=auto --recursion-method=none --quiet --execute
#
# 4.字段改名
# pt-online-schema-change --user=$user --password=$password --host=$host --port=$port  --alter "CHANGE COLUMN age address varchar(30)" D=$D,t=$t --no-check-alter --no-check-replication-filters --alter-foreign-keys-method=auto --recursion-method=none --quiet --execut
#
# 5.增加索引
# pt-online-schema-change --user=$user --password=$password --host=$host --port=$port  --alter "ADD INDEX idx_address(address)" D=$D,t=$t --no-check-alter --no-check-replication-filters --alter-foreign-keys-method=auto --recursion-method=none --print --execute
#
# 6.删除索引
# pt-online-schema-change --user=$user --password=$password --host=$host --port=$port  --alter "DROP INDEX idx_address" D=$D,t=$t --no-check-alter --no-check-replication-filters --alter-foreign-keys-method=auto --recursion-method=none --print --execute
#
#--------------参数说明-------------
# 1. --ask-pass
#    隐式输入连接MySQL的密码
# 2. --defaults-file
#    -F读取配置文件
# 3. --alter
#    结构变更语句,不需要alter table关键字。可以指定多个更改,用逗号分隔。如下场景,需要注意:
#    不能用RENAME来重命名表。       
#    列不能通过先删除,再添加的方式进行重命名,不会将数据拷贝到新列。
#    如果加入的列非空而且没有默认值,则工具会失败。即其不会为你设置一个默认值,必须显示指定。
#    删除外键(drop foreign key constrain_name)时,需要指定名称_constraint_name,而不是原始的constraint_name。
#    如:CONSTRAINT `fk_foo` FOREIGN KEY (`foo_id`) REFERENCES `bar` (`foo_id`),需要指定:--alter "DROP FOREIGN KEY _fk_foo"
# 4. --alter-foreign-keys-method
#    需要特殊处理带有外键约束的表,以保证它们可以应用到新表.当重命名表的时候,外键关系会带到重命名后的表上。
#    该工具有两种方法,可以自动找到子表,并修改约束关系。
#    auto: 在rebuild_constraints和drop_swap两种处理方式中选择一个。
#    
#    rebuild_constraints:使用 ALTER TABLE语句先删除外键约束,然后再添加.如果子表很大的话,会导致长时间的阻塞。
#    drop_swap: 执行FOREIGN_KEY_CHECKS=0,禁止外键约束,删除原表,再重命名新表。这种方式很快,也不会产生阻塞,但是有风险:
#                在删除原表和重命名新表的短时间内,表是不存在的,程序会返回错误。
#                如果重命名表出现错误,也不能回滚了.因为原表已经被删除。
#    none: 类似"drop_swap"的处理方式,但是它不删除原表,并且外键关系会随着重命名转到老表上面。
# 5. --[no]check-alter
#    默认yes,语法解析。配合--dry-run 和 --print 一起运行,来检查是否有问题(change column,drop primary key)。
#
# 6. --max-lag
#    默认1s。每个chunk拷贝完成后,会查看所有复制Slave的延迟情况。要是延迟大于该值,则暂停复制数据,直到所有从的滞后小于这个值,使用Seconds_Behind_Master。
#    如果有任何从滞后超过此选项的值,则该工具将睡眠--check-interval指定的时间,再检查。如果从被停止,将会永远等待,直到从开始同步,并且延迟小于该值。
#    如果指定--check-slave-lag,该工具只检查该服务器的延迟,而不是所有服务器。
# 7. --check-slave-lag
#    指定一个从库的DSN连接地址,如果从库超过--max-lag参数设置的值,就会暂停操作
# 
# 8. --check-interval
#    默认是1。--max-lag检查的睡眠时间。
#
# 9. --[no]check-replication-filters
#    默认yes。如果工具检测到服务器选项中有任何复制相关的筛选,如指定binlog_ignore_db和replicate_do_db此类。发现有这样的筛选,工具会报错且退出。
#    因为如果更新的表Master上存在,而Slave上不存在,会导致复制的失败。使用–no-check-replication-filters选项来禁用该检查。
# 10. --[no]drop-old-table
#    默认yes。复制数据完成重命名之后,删除原表。如果有错误则会保留原表。
# 
#
#-------------------------------------------------

使用时根据案例和参数说明更改相关参数即可。

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...