阿里云ghost + DTS导致目标库数据丢失的问题解决方案

问题现象:

当使用gh-ost对DTS正在同步的表进行表结构更改后,gh-ost完成后,发现目标端该数据表内容被清空。

问题分析:

gh-ost采用建幽灵表的方式进行同步,但是幽灵表并不在DTS的配置中,因此数据不能正常同步。

目标端数据被清空是因为:

DTS同步会同步涉及到该表的rename操作,不管该表是rename的源还是目标。

因此在gh-ost 的操作  rename wjf_tmp  to wjf_tmp_del 在目标库被执行。

rename  wjf_tmp_gho to wjf_tmp操作,因为wjf_tmp_gho不存在,而无法执行。但是会出现一张老的表结构的wjf_tmp,应该就是dts对这种错误的处理机制了。

解决方案操作步骤:

假设需要操作的表名叫做wjf_tmp,在源库操作的add column操作。

1、在源库开始gh-ost更改表结构之前,暂停DTS链路。

2、在gh-ost操作结束后,在目标库进行如下操作:

## 1、在目标库的该表上执行add column操作

alter table wjf_tmp add column ……

## 2、更改表名到ghost表名(_wjf_tmp_gho表名规则符合ghost默认规则)

alter table wjf_tmp rename to _wjf_tmp_gho;

## 3、创建空表

create table wjf_tmp like _wjf_tmp_gho;

3、打开DTS同步链路

这样就可以完全同步主库的操作,也不会有数据丢失了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值