问题现象:
当使用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操作结束后,在目标库进行如下操作:
|
3、打开DTS同步链路
这样就可以完全同步主库的操作,也不会有数据丢失了。