pt-osc使用情景

pt-osc : pt-online-schema-change
如果项目上线之后需要执行dml 【 修改表的字段名,类型等】语句比较困难 , 可能会产生锁表的问题
因为我们使用pt-osc 来解决线上的数据库执行dml语句困难的问题

使用原理

  1. 如果存在外键 那么更具alter-foreign-keys-method参数的值检测外键相关的表,做对应的设置处理,没有使用 —alter-foreign-keys-method 指定特定的值,该工具就不予以执行
  2. 创建一个新的表,表结构是修改之后的数据表,用于从原数据库表向新表中导入数据
  3. 创建触发器,用于记录从拷贝数据开始之后,对源数据表继续进行数据修改的操作记录下来,用于数据拷贝结束之后,执行这些的操作,,保证数据不会丢失,如果表中已经定义了触发器,这个工具就不能工作了
  4. 拷贝数据,从源数种拷贝数据到新的表中
  5. 修改外键相关的表,根据修改之后的数据,修改外键关联的子表
  6. rename源数据库表为old表,把新表rename为源表名,并且将old表删除

具体使用

场景 如果线上需要将 sbtest 表中 id 字段的类型为 bigint :::info 1.操作前备份:
nohup mydumper -u ${user} -p ${passwd} -o ${bakdir} -B ${database} -T ${table1},${table2} -c -e -t 16 -o /backup/mydumper/data/ > /backup/mydumper/data/dumper_out.log &

2.查看检查语句是否正常
pt-online-schema-change -u root -h localhost -p “paic1234A?” -P 3306 —alter=” modify column id bigint(11)” D=sysbench,t=sbtest1 —charset=utf8 —no-version-check —no-drop-old-table —statistics —critical-load=”Threads_running:200” —max-load=”Threads_running=25” —print —dry-run

3.正式执行
pt-online-schema-change -u root -h localhost -p “paic1234A?” -P 3306 —alter=” modify column id bigint(11)” D=sysbench,t=sbtest1 —charset=utf8 —no-version-check —no-drop-old-table —statistics —critical-load=”Threads_running:200” —max-load=”Threads_running=25” —print —execute

4.检查表结构是否正常

show create table sbtest1\G;

对比原表和目标表的数据
select count() from sbtest1;
select count(
) from _sbtest1_old;
5.删除旧表
drop table _sbtest1_old; :::