# [KB]关于 BR restore 时报错 "failed to validate checksum & restore checksum mismatch"

## Key Words

BR,failed to validate checksum, checksum mismatch

## Issue

用BR做数据库恢复时，执行以下命令，遇到报错

```sql
"Error: failed to validate checksum: [BR:Restore:ErrRestoreChecksumMismatch]restore checksum mismatch"
```

```shell
./br restore full --pd "XX.XX.XX.XX:2379" --storage "local:///tmp/backup" --ratelimit 128
```

## Root Cause

BR做备份时，会记录所备份表的 checksum 值，暂记作 checksumvalue_1，这个值和表的数据有关。做 restore 时，restore 后，会对完成 restore 的表再次计算其 checksum 值，记作 checksumvalue_2，如果checksumvalue_1<>checksumvalue_2，则算 restore 失败

## Diagnostic Steps

- 在TiDB [官方文档](https://docs.pingcap.com/zh/tidb/stable/backup-and-restore-use-cases##恢复前的准备工作) 中，提到使用 BR 进行恢复前的准备工作如下：

```markdown
恢复前的准备工作
使用 BR 进行恢复前的准备工作如下：
运行 br restore 命令前，需要检查新集群，确保集群内没有同名的表。
```

- restore 时，如果表存在且有数据的情况下，将对 backup 文件中的 KV 和表中的 KV 匹配，匹配的上就 replace，否则，就什么都不做，如果表中自备份以来有新插入的数据，restore 时是不会受影响的，导致 restore 后表数据和备份时不一致，则备份时和恢复后表的 checksumvalue 不匹配。

## Resolution

N/A

## Workaround

使用 BR 做 restore 之前，需要清空要恢复的表或者数据库

* 将所有要恢复的表清空（truncate表，不能delete表）
* 或者将所有需要恢复的表 drop
* 或者将所有要恢复的数据库 drop