ITPub博客

首页 > 数据库 > MySQL > pt-online-schema-change使用参数说明

pt-online-schema-change使用参数说明

原创 MySQL 作者:haoge0205 时间:2020-03-24 02:14:57 0 删除 编辑

pt-online-schema-change使用


工作原理:
1、如果存在外键,根据alter-foreign-keys-method参数的值,检测外键相关的表,做相应设置的处理。没有使用 --alter-foreign-keys-method=rebuild_constraints 指定特定的值,该工具不予执行
2、创建一个和源表表结构相同的表(table_new),执行alter修改临时表结构
3、在原表上创建三个触发器,insert,delete,udpate对应的触发器,(用于copy数据的过程中,在原表的更新操作更新到新表)
4、从原表拷贝数据到新表,拷贝过程中在原表的写操作都会更新到新建的临时表
5、修改外键相关的子表,根据修改后的数据,修改外键关联的子表
6、rename源数据表为old,把新表rename为源表明,并将old表删除
7、删除触发器

执行条件:
1、操作的表必须有主键或者唯一索引,否则报错
2、该表不能定义触发器,否则报错

用法介绍:
pt-online-schema-change --host=ip --port=3306 --user=username --password='password' D=db_name,t=table_name --alter="modify order_id bigint(20) COMMENT '订单id';" --critical-load="Threads_running=200" --sleep=1 --charset=utf8mb4 --check-slave-lag="192.168.1.2,192.168.1.3" --check-interval=1 --execute

--dry-run 创建并修改新表,但不创建触发器,也不复制表,或者替换原表,与--execute互斥
--execute 这个参数的作用和前面工作原理的介绍的一样,会建立触发器,来保证最新变更的数据会影响至新表。注意:如果不加这个参数,这个工具会在执行一些检查后退出
--critical-load 每次chunk操作前后,会根据show global status统计指定的状态量的变化,默认是统计Thread_running。目的是为了安全,防止原始表上的触发器引起负载过高。这也是为了防止在线DDL对线上的影响。超过设置的阀值,就会终止操作,在线DDL就会中断。提示的异常如上报错信息
--charset=utf8 连接到MySQL后运行SET NAMES UTF8
--check-slave-lag 检查主从延迟
--check-replication-filters 检查复制中是否设置了过滤条件,如果设置了,程序将退出
--nocheck-replication-filters 不检查复制中是否设置了过滤条件
--set-vars 设置mysql的变量值
--sleep 每个chunk导入后与下一次chunk导入开始前sleep一会,sleep时间越长,对于磁盘IO的冲击就越小
--[no]drop-old-table rename新表后drop旧表,可以no-xxx来保留旧表
--[no]drop-new-table 如果复制原表失败则删除新表; 也可以no-xxx来保留新表
--chunk-size chunk的行数,默认1000
--chunk-index-columns 有复合索引的时候,指定索引列
--critical-load 默认Threads_running=50; 每次chunk执行后会自动用SHOW GLOBAL STATUS检查负载情况,如果超过阈值则放弃;
--execute 执行操作 与 --dry-run互斥
--force 强制运行,可能打破外键约束
--skip-check-slave-lag 检查SLAVE的时候,指定该SLAVE跳过;
--print 将会显示工具执行的命令
--null-to-not-null 修改允许null值为not null
--preserve-triggers 保留原表的触发器,不删除
--max-lag 默认1s, 如果主从延时的时间超过这个值,则复制会暂停"--check-interval"秒时间;然后再检查,直到主从延时小于该值;如果指定了"--check-slave-lag",则只会检查指定slave延时,而不是检查所有slave;如果有任何SLAVE stop了,那么工具会一直等待下去;每次停止的时候都会打印报告
--ask-pass 连接的时候会要求提供密码


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28939273/viewspace-2682152/,如需转载,请注明出处,否则将追究法律责任。

全部评论

注册时间:2013-11-28

  • 博文量
    286
  • 访问量
    1725299