Mysql 主从切换添加字段情景以及注意事项

场景

 当所添加字段的表数据量较大,而且所操作的表上面还有触发器, ,直接操作DDL延迟时间长(五小时左右),而pt-online-schema-change工具又不能使用,pt-online-schema-change限制,所操作的表不能建立触发器。

测试如下创建test_ddl表

注意事项:

 1 mysql日志格式row

所添加字段必须位于所有字段之后,所添加的字段不能被操作,操作检查到不一致就会失败

  Master:mysql> desc test_ddl;

+-------+-------------+------+-----+---------+-------+

| Field |Type        | Null | Key | Default | Extra |

+-------+-------------+------+-----+---------+-------+

|id    | int(11)     | YES |     | NULL   |       |

| name  |varchar(30) | YES  |     | NULL   |       |

| name2 |varchar(40) | YES  |     | NULL   |       |

+-------+-------------+------+-----+---------+-------+

Slave:执行 alter table test_ddl add name6varchar(20) after name;

   Master: insert intotest_ddl(id,name,name2) values(4,'tom','cat');

   Slave:sql_thread线程中断

   Slave:mysql> desc test_ddl;

+-------+-------------+------+-----+---------+-------+

| Field |Type        | Null | Key | Default | Extra |

+-------+-------------+------+-----+---------+-------+

| id    |int(11)     | YES  |     |NULL    |       |

| name  | varchar(30) | YES |     | NULL   |       |

| name6 | varchar(20) | YES |     | NULL   |       |

| name2 | varchar(40) | YES |     | NULL   |       |

  查看master binlog格式如下

 ### INSERTINTO prodstockdb.test_ddl

### SET

###  @1=4

###  @2='tom'

###  @3='cat'

 根据字段匹配,master与slave表的第三个字段不一致,导致复制失败。

2 日志格式statement

  上面遇到的问题,有没有办法解决,主库调整binlog_format格式为statement可解决。

3  常见操作Alter tableadd/modify/change操作,在binlog_format=row下,sql涉及到修改字段不一致都会报错。这种情况下可修改binlog_format=state格式,避开row下严格的一致性检查

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值