pt-online-schema-change

#!/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。复制数据完成重命名之后,删除原表。如果有错误则会保留原表。
# 
#
#-------------------------------------------------

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

时间: 2024-10-12 08:41:26

pt-online-schema-change的相关文章

案例 - percona-online-schema-change各种坑

线上环境复制使用ROW模式,对于上亿的表,使用pt online schema change 在把数据从旧表拷贝到临时表这步操作,会产生大量的binlog,这会导致主从延迟 在pt工具包2.1之前,pt-online-schema-change是不会打印binlog的,如果要在主从上加索引,需要分别在主库执行一次,在从库执行一次 它提供了一个--log-bin参数,并且默认是关闭binlog的 --bin-log Allow binary logging (SET SQL_LOG_BIN=1).

Replicate Schema Changes

Replication 能够将Article的Schema Change同步到Subscriber中,只需要将 Publication 的属性:Replicate Schema Changes 设置为Ture. 引用<Make Schema Changes on Publication Databases>: If you make the following schema changes to a published article, they are propagated, by defa

facebook开源项目集合

Facebook的开源大手笔 1. 开源Facebook平台代码 Facebook在2008年选择将该平台上的重要部分的代码和应用工具开源.Facebook称,平台已经基本发展成熟,此举可以让开发者更全面地理解整个Facebook平台,更容易地为Facebook开发应用软件,并可以回报社区. 该项目代号为“FBOpen”,其中包含了实现Facebook平台的一些基础设施.功能等,如API架构.FQL分析器.FBML分析器.FBJS,以及许多常用方法和标签的实现,代码基于PHP.这意味着其他开发者

sqlserver 存储过程中使用临时表到底会不会导致重编译

曾经在网络上看到过,SqlServer的存储过程中使用临时表,会导致执行计划无法重用, 运行时候会导致重编译的这么一个说法,自己私底下去做测试的时候,根据profile的跟踪结果, 如果不是统计信息变更导致导致的重编译,单单是使用临时表,并不会导致重编译, 但是对于一些特殊的情况,又确实会出现重编译的, 为了弄清楚这个问题,查阅了大量的资料,才把这个问题弄清楚,这里特意记录下来,希望武断地认为存储过程中使用了临时表就会导致重编译的这个观点得到纠正. 首先进行下面的测试,我们知道,导致临时表重编译

Mac OS 10.10 php不能连接mysql问题解决

php连接数据库都没问题,升级到10.10这后, 突然连接不上了. 这个问题放了很久, 今天突然搜索到一篇文章. 用链接的方式解决了. 原文如下: So you installed Ubuntu, got all excited about developing your Rails application on it, and then- No such file or directory - /tmp/mysql.sock) No matter what you do, database c

SQL Server 中WITH (NOLOCK)浅析

原文:SQL Server 中WITH (NOLOCK)浅析 概念介绍 开发人员喜欢在SQL脚本中使用WITH(NOLOCK), WITH(NOLOCK)其实是表提示(table_hint)中的一种.它等同于 READUNCOMMITTED . 具体的功能作用如下所示(摘自MSDN): 1: 指定允许脏读.不发布共享锁来阻止其他事务修改当前事务读取的数据,其他事务设置的排他锁不会阻碍当前事务读取锁定数据.允许脏读可能产生较多的并发操作,但其代价是读取以后会被其他事务回滚的数据修改.这可能会使您的

MyCat 学习笔记 第十一篇.数据分片 之 分片事务处理

1 环境说明 VM 模拟3台MYSQL 5.6 服务器 VM1 192.168.31.187:3307 VM2 192.168.31.212:3307 VM3 192.168.31.150:  3307 MYCAT 1.5 服务部署在宿主机上 MYCAT 192.168.31.207 :8806[SQL执行端口] / 9066[管理端口] 2 应用场景 2.0 MYCAT配置 schema.xml <schema name="TESTDB" checkSQLschema=&quo

《Mycat学习笔记》 番外篇一.客户端使用latin1字符集,后端MySQL为UTF8字符集,MyCat日志分析。

其实这个番外篇比较无聊——即客户端为lantin字符集,后面MySQL为U8字符集,MyCat在中间到底会起什么作用. 再说下本次验证的环境: Mac OS 10.11.2 MySQL 5.6 MyCat 1.5 OK,开始我们的验证工作. 1) 由于数据库与操作系统已被默认设置为U8编码,计划通过修改Mysql  “character_set_client” 参数调整客户端字符集配置进行验证. 关于MYSQL字符集较全面的介绍,请参考 <mysql_query("set names gb

SQL Server 中WITH (NOLOCK)浅析(转潇湘隐者)

博文出处:http://www.cnblogs.com/kerrycode/p/3946268.html 概念介绍 开发人员喜欢在SQL脚本中使用WITH(NOLOCK), WITH(NOLOCK)其实是表提示(table_hint)中的一种.它等同于 READUNCOMMITTED . 具体的功能作用如下所示(摘自MSDN): 1: 指定允许脏读.不发布共享锁来阻止其他事务修改当前事务读取的数据,其他事务设置的排他锁不会阻碍当前事务读取锁定数据.允许脏读可能产生较多的并发操作,但其代价是读取以

Svn Replacement For Git Stash

svn 实现git stash类似的功能 % svn diff > WorkInProgress.txt % svn revert -R . <make changes> % svn commit -m "Patched to support server schema change" % patch -p0 -i WorkInProgress.txt % rm WorkInProgress.txt Svn Replacement For Git Stash,布布扣,