dm同步 下游字段多于上游会出现问题

目前测试发现一个dm同步bug

上游字段:| id | student_id | name |
下游字段:| id | student_id | name | flag |

在按官方文档配置好binlog-schema update 后,同步任务正常运行启动
上下游同时有这条数据
上游:
| id | student_id | name |
| 1 | 00000001 | 张三 |

下游:
| id | student_id | name | flag |
| 1 | 00000001 | 张三 | null |

下游更新了这条数据:
| id | student_id | name | flag |
| 1 | 00000001 | 张三 | 1 |

当上游再次更新数据时:
| id | student_id | name | → | id | student_id | name |
|1 | 00000001 | 张三 | → | 1 | 00000001 | 李四 |

下游数据会变成
| id | student_id | name | flag |
| 1 | 00000001 | 李四 | null |

会把下游多出来的字段重新置为null
原因应该是上游MySQL的二进制日志记录格式为row ,但是不知道改怎么处理这种问题

同步生成 SQL 得变为 insert on duplicate 语法。replace 语句是 delete + insert,所以变成 null 了吧。

官网有说明的,直接看这个文档: https://docs.pingcap.com/zh/tidb/stable/migrate-with-more-columns-downstream#使用-dm-迁移至存在更多列的下游

1 个赞

找到问题了,是我后面配置了safe_mode造成的。update 被解析成了 delete + replace

这个比较有意思,学习到了

打卡了