# [KB]关于 DM 上游 MySQL 配置了binlog do db 导致 DM 同步的上下游数据不一致

## Description

DM 2.0.4 同步mysql数据到tidb，同步任务中只同步一张表（all模式），几天后观察发现上下游表数据不一致。具体表现为：在用 tiup dmctl query-task task_name 方式查看确认同步无延迟下，查询上下游表数据量，发现数据量不一致。

### 上游数据量

![image.png](/images/DM/DM-MySQL-do-db-1.png)

### 下游数据量

![image.png](/images/DM/dm-mysql-do-db-2.png)

## Root Cause

上游 mysql 配置了 binlog-do-db = xxx，也就是mysql实例中只有其中一个库产生binlog，而其他库都不会产生binlog，而同步的那张表在不会产生binlog的库中，导致这个表都没有增量数据，造成数据不一致。

## Diagnostic Steps

1. 确认下游 tidb 没有做额外的DML操作，也没有其他人会操作下游tidb数据库；

2. 确认上游mysql是单实例，而不是主从环境中的从库；

3. 多次查看同步任务的延迟 和 上下游表数据量，确认延迟很小，但是表数据量相差较多；

4. 查看下游 dm_meta 中的同步任务的load_checkpoint 表数据，全量数据 load 都是正常的，没有数据丢失：

    ![image.png](/images/DM/dm-mysql-do-db-4.png)

5. 之后上游该表新增了 3 条数据，但过了一两分钟该数据还没有到下游；查看了这个时间段内上游mysql的binlog日志：

```sql
msyqlbinlog --no-defaults -vv {binlog_file_name} --start-postion=19060889 |grep {table_name}
```

![image.png](/images/DM/dm-mysql-do-db-3.png)

这里发现这段时间的binlog中只有 psadb 库的binlog数据，而没有 psadb_test 库；而dm同步的是 psadb_test 库下的表，不是 psadb 库下的表。

之后再排查上游mysql的配置文件，发现有配置 binlog-do-db：

![image.png](/images/DM/dm-mysql-do-db-5.png)

综上，是 psadb_test 库不会产生binlog，因此dm只能做全量数据同步，而不能做增量数据同步，上下游表数据不一致。

## Resolution

上游mysql设置 binlog-do-db 参数，让 psadb_test 库也产生binlog；同时，同步任务重做。

## Workaround

N/A