7.1.3集群PITR filter过滤bug,无法正确过滤库表

Bug 反馈
清晰准确地描述您发现的问题,提供任何可能复现问题的步骤有助于研发同学及时处理问题
【 TiDB 版本】7.1.3
【 Bug 的影响】
PITR恢复指定库表时进行point恢复时,恢复的结果有误
【可能的问题复现步骤】

  1. 集群1创建日志备份任务
  2. 对集群1进行s3全量备份
  3. 在集群1中创建库表,插入数据
    create database test1;
    create database test2;
    create table test.t1(id int primary key);
    create table test.t21(id int primary key);
    create table test1.t1(id int primary key);
    create table test1.t2(id int primary key);
    create table test2.t1(id int primary key);
    create table test1.t2(id int primary key);
    insert into test.t1 values(1),(2);
    insert into test.t2 values(1),(2);
    insert into test1.t1 values(1),(2);
    insert into test1.t2 values(1),(2);
    insert into test2.t1 values(1),(2);
    insert into test2.t2 values(1),(2);
  4. 待日志备份进度推进到当前时间,进行pitr到集群2,并通过–filter参数设置库表过滤
    查看当前checkpoint:
    tiup br log status --task-name={task_name} --pd “{pd_addr]” --json
    执行恢复命令,并设置–filter为“test.t1”
    tiup br restore point --pd “{pd_addr}” --storage=‘{s3_url}’ --full-backup-storage=‘{full_backup_s3_url}’ --restored-ts ‘{chekcpoint}’ --filter “test.t1” --s3.endpoint {s3_enpoint}
  5. 查看集群2的恢复情况

【看到的非预期行为】

  1. 集群2内test1,test2内所有的库表结构都被恢复出来,但是无数据
  2. 集群2内test内没有任何表

mysql> show databases;
±-------------------+
| Database |
±-------------------+
| INFORMATION_SCHEMA |
| METRICS_SCHEMA |
| PERFORMANCE_SCHEMA |
| mysql |
| test |
| test1 |
| test2 |
±-------------------+
7 rows in set (0.01 sec)

mysql> use test;
Database changed
mysql> show tables;
Empty set (0.01 sec)

mysql> use test1;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
±----------------+
| Tables_in_test1 |
±----------------+
| t1 |
| t2 |
±----------------+
2 rows in set (0.00 sec)

mysql> select * from t1;
Empty set (0.00 sec)

mysql> select * from t2;
Empty set (0.00 sec)

mysql> use test2;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
±----------------+
| Tables_in_test2 |
±----------------+
| t1 |
| t2 |
±----------------+
2 rows in set (0.00 sec)

mysql> select * from t1;
Empty set (0.01 sec)

mysql> select * from t2;
Empty set (0.00 sec)

【期望看到的行为】
只有test.t1库被恢复到集群2

【相关组件及具体版本】
7.1.3
【其他背景信息或者截图】
如集群拓扑,系统和内核版本,应用 app 信息等;如果问题跟 SQL 有关,请提供 SQL 语句和相关表的 Schema 信息;如果节点日志存在关键报错,请提供相关节点的日志内容或文件;如果一些业务敏感信息不便提供,请留下联系方式,我们与您私下沟通。

BR 的 PITR 好像不支持表过滤。。。。:thinking:

1 个赞

从提供的 case 看,是希望对增量 DDL 的进行过滤,但是产品目前不支持该功能,主要是考虑到对增量 DDL 的支持会比较复杂,包括 truncate table/rename table 等 corner cases 难以处理,因此不要在生产环境使用该参数进行恢复。

我用 v7.1.3 试了下,去掉该参数是可以的

1 个赞

产品需求建议在这里描述一下:

学习了,以后有用

此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。