1. 参数

参数 默认值 说明
--host=xxx --user=xxx --password=xxx 连接实例信息,缩写-h xxx -u xxx -p xxx,密码可以使用参数--ask-pass 手动输入。
--alter 结构变更语句,不需要 ALTER TABLE关键字。与原始ddl一样可以指定多个更改,用逗号分隔。
D=db_name,t=table_name 指定要ddl的数据库名和表名
--max-load 默认为Threads_running=25。每个chunk拷贝完后,会检查 SHOW GLOBAL STATUS 的内容,检查指标是否超过了指定的阈值。如果超过,则先暂停。这里可以用逗号分隔,指定多个条件,每个条件格式: status指标=MAX_VALUE或者status指标:MAX_VALUE。如果不指定MAX_VALUE,那么工具会这只其为当前值的120%。
--max-lag 默认1s。每个chunk拷贝完成后,会查看所有复制Slave的延迟情况(Seconds_Behind_Master)。要是延迟大于该值,则暂停复制数据,直到所有从的滞后小于这个值。--check-interval配合使用,指定出现从库滞后超过 max-lag,则该工具将睡眠多长时间,默认1s,再检查。如--max-lag=5 --check-interval=2。
--chunk-time 默认0.5s,即拷贝数据行的时候,为了尽量保证0.5s内拷完一个chunk,动态调整chunk-size的大小,以适应服务器性能的变化。
--set-vars 使用pt-osc进行ddl要开一个session去操作,set-vars可以在执行alter之前设定这些变量,比如默认会设置--set-vars "wait_timeout=10000,innodb_lock_wait_timeout=1,lock_wait_timeout=60"。
--dry-run 创建和修改新表,但不会创建触发器、复制数据、和替换原表。并不真正执行,可以看到生成的执行语句,了解其执行步骤与细节,和--print配合最佳。。
--execute 确定修改表,则指定该参数。真正执行alter。–dry-run与–execute必须指定一个,二者相互排斥

1. --alter说明

1.绝大部分情况下表上需要有主键或唯一索引,因为工具在运行当中为了保证新表也是最新的,需要旧表上创建 DELETE和UPDATE 触发器,同步到新表的时候有主键会更快。个别情况是,当alter操作就是在c1列上建立主键时,DELETE触发器将基于c1列。

  1. 子句不支持 rename 去给表重命名。
  2. alter命令原表就不支持给索引重命名,需要先drop再add,在pt-osc也一样。(mysql 5.7 支持 RENAME INDEX old_index_name TO new_index_name)。但给字段重命名,千万不要drop-add,整列数据会丢失,使用change col1 col1_new type constraint(保持类型和约束一致,否则相当于修改 column type,不能online)
  3. 子句如果是add column并且定义了not null,那么必须指定default值,否则会失败。
  4. 如果要删除外键(名 fk_foo),使用工具的时候外键名要加下划线,比如--alter "DROP FOREIGN KEY _fk_foo"

2. 使用限制

  1. 原表上不能有触发器存在
  2. 在使用之前需要对磁盘容量进行评估。因为数据量会多一倍

3. 使用示例

1. 添加字段

pt-online-schema-change --user=user --password=password --host=10.0.201.34  --alter "ADD COLUMN f_id int default 0" D=confluence,t=sbtest3 --print --execute

pt-online-schema-change 在线修改表结构相关推荐

  1. mysql在线修改表结构大数据表的风险与解决办法归纳

    整理这篇文章的缘由: 互联网应用会频繁加功能,修改需求.那么表结构也会经常修改,加字段,加索引.在线直接在生产环境的表中修改表结构,对用户使用网站是有影响. 以前我一直为这个问题头痛.当然那个时候不需 ...

  2. mysql 主从 索引_Mysql繁忙主从库在线修改表结构与添加索引问题

    本帖最后由 jan_1985 于 2014-1-15 13:28 编辑 Mysql繁忙主从库在线修改表结构与添加索引问题 一直以来,生产情况下都有修改索引和修改字段的需求,但是对锁表引起的访问不便是会 ...

  3. osc mysql_MySQL在线修改表结构pt-osc

    MySQL在线修改表结构pt-osc 重所周知 MySQL的DDL操作操作是相比比较昂贵的.因为MySQL在修改表期间会阻塞任何读写操作. 基本上业务处于瘫痪.如果数据量较大可能需要好几个小时才能完成 ...

  4. gh ost mysql_mysql 在线修改表结构工具 gh-ost

    -allow-master-master 显式的允许在主主集群中运行-allow-on-master 允许直接运行在主机上,如果没有集群使用这个选项,推荐用在从机上-alter string(必须参数 ...

  5. percona-toolkit之pt-online-schema-change(在线更改表结构)

    传统方法修改表结构 类似alter table xx modify,在修改表结构时需要锁表,如果表很大,则操作时间会较长.目前,绝大多数业务要求24*7无间断服务,而此过程中,如果造成较长时间数据库无 ...

  6. mysql修改表结构大表_在线修改MySQL大表的表结构

    由于某个临时需求,需要给在线MySQL的某个超过千万的表增加一个字段.此表在设计之时完全按照需求实现,并没有多余的保留字段. 我们知道在MySQL中如果要执行ALTER TABLE操作,MySQL会通 ...

  7. oracle 11g 通过在线重定义方式修改表结构

    今天因为要对一套数据库的数据抽取进行io优化,希望通过修改表结构将抽取io降下来,因为抽取只针对标签HAVE_FLAG为"0"的值进行抽取,抽取之后更新HAVE_FLAG为其他值, ...

  8. mysql修改工资字段_基于Linux的MySQL操作实例(修改表结构,MySQL索引,MySQL数据引擎)...

    基于Linux的MySQL操作实例(修改表结构,MySQL索引,MySQL数据引擎) 前言 本篇是基于Linux下针对MySQL表结构的修改,MySQL索引的操作以及MySQL数据引擎的配置和说明. ...

  9. OSC 在线更改表结构

    随着业务的发展,更改表结构变的越来越常见.一般情况下,我们通过alter table 之类的DDL语句就可以完成.然而当执行alter table 语句时,数据库会对整个实例加锁,阻塞业务的所有操作, ...

最新文章

  1. 钢结构节点输出软件_BIM助力桥梁钢结构设计施工一体化建设
  2. 一起因网线问题引起的网络故障的解决过程
  3. js 闭包的用法详解
  4. Maven项目不能编译jsp解决方法:Unable to compile class for JSP
  5. 为什么离开学校后,学习能力直线下降?
  6. mysql安装与配置的截图_windows下MySQL5.6版本安装及配置过程附有截图和详细说明...
  7. oracle数据库连接满了,ORACLE数据库连接数满的分析及优化
  8. js 图片压缩上传(base64位)以及上传类型分类
  9. 【转载】一天之内上手.Net+WAP项目
  10. CentOS 6.5装配第三方软件库epel
  11. 操作系统读写者问题实验报告_备战秋招——操作系统(2)
  12. 投大数据简历的原则以及在哪些地方投简历最有效?
  13. QQ,MSN,旺旺在线客服代码
  14. matlab如何算排列组合数,MATLAB 排列组合问题
  15. VMware下如何虚拟软盘启动
  16. DPM目标检测算法(毕业论文节选)
  17. 奥比3d 摄像头 android,奥比中光3D传感摄像头Ubuntu系统安装ROS说明
  18. 攀登数据基础设施高峰,这是一场勇敢者的游戏
  19. 项目经理手册-项目经理需要铭记在心的话
  20. 孤立森林异常检测算法原理和实战(附代码)

热门文章

  1. 手机端网站测试用什么软件,3款优秀的移动webAPP网站在线测试工具推荐
  2. spingboot集成webSocket
  3. windows下备份mysql 数据库
  4. Normalize.css :一种用于重置默认的CSS样式的样式工具
  5. 三维重建:SFM中BA的并行化
  6. OpenCV、OpenCL、OpenGL、OpenPCL
  7. Warning:关于_CRT_SECURE_NO_WARNINGS
  8. python3:语法变动 及新特性
  9. Java双等号,Equals(),HashCode()小结
  10. 优先队列 HDOJ 5437 Alisha's Party