7.5版本的br restore full不支持增量恢复(即便恢复的表在集群上不存在)

操作方式:在生产的TiDB集群使用br backup full -f "db1.t1" -f "db2.t2"模式将表数据备份到S3中,想将数据导入到测试的7.5集群中,结果在执行br restore full时候报错(这种操作在6.X,甚至7.1时候都是可行的),但是7.5时候竟然加了强制校验,必须要求集群是新集群不能有任何库表,(以往只会检查恢复的表是不是和集群上已有的表冲突,只要不冲突就不会报错)
后续我即便使用--filter将几个表都主动设置了一下,也还是没办法恢复成功。

l_balance -f ying99_fundtxn.cust_capital_balance_history -f ying99_fundtxn.offline_execute_info -f ying99_fundtxn.offline_remit_history -f ying99_fundtxn.capital_history -f ying99_payment.payment_info -f ying99_payment.regulatory_jymx_info -f ying99_payment.regulatory_task -f ying99_payment.regulatory_transfer_info -f ying99_payment.regulatory_zjqt_info --storage=s3://mysql-dts-migrate/capital-20240204 --s3.endpoint=https://oss-cn-shenzhen-internal.aliyuncs.com --s3.provider alibaba --log-file restore.log
Detail BR log in restore.log
[2024/02/04 10:32:49.506 +08:00] [INFO] [collector.go:77] ["Full Restore failed summary"] [total-ranges=0] [ranges-succeed=0] [ranges-failed=0]
#######################################################################
# the target cluster is not fresh, cannot restore.
# you can drop existing databases and tables and start restore again
#######################################################################
Error: user db/tables: tpcc_test, warehouse, district, customer, history, new_order, orders, order_line, stock, item, ...: [BR:Restore:ErrRestoreNotFreshCluster]cluster is not fresh

类似这个帖子的问题,这个不兼容变更,感觉不太合理。。

因为只涉及两个database,先暂时用多次执行br restore db的方式来绕过了,不过还是希望后续考虑支持br restore full --filter的方式,来一次性恢复多个库表(可能涉及不同database下的表,不管是br restore table还是 br restore db都不支持正则,在使用时候很不方便)。

确实不太合理

br适合做全库的,单个表和db备份恢复不怎么好用

:thinking:之前要是要求必须向空集群还原吧,如果是非空集群会出现数据逻辑混乱的情况。我之前还原过一次,比如where条件是1=1,结果筛选出来的结果有1=2的,全乱了。

应该说必须往非空表里恢复,如果表有数据,确实不行。

7.1.3版本,表里有和备份相同数据的情况下,也有概率恢复不报错 :joy:
但是比如t1表有value 1,恢复之前先insert 2,然后再delete 2。虽然表里面仍旧只有value 1,但是恢复会报错:
Error: failed to validate checksum: [BR:Restore:ErrRestoreChecksumMismatch]restore checksum mismatch

insert 1;backup;truncte ;insert 1;restore 不报错

br 现在只有备份支持增量

我也在等这个功能,数据量大的话恢复一半失败掉,真的很难受

br backup/restore full 适合备份和恢复整个集群,建议在空集群上执行恢复全量恢复操作。部分表或者部分库的恢复,建议使用 br restore db/table 来恢复。

br restore full 不带 --filter 的集群恢复增加空集群检测是为了避免在已有数据的集群上恢复,出现线上数据被误恢复覆盖、恢复的表结构和已有表结构不一致导致数据不一致等等问题。

br restore full--filter 的恢复本质上是多库/表的恢复,不应该被空集群检测阻塞住,是一个非预期行为的 bug: https://github.com/pingcap/tidb/issues/51009,需要在高版本修复。

另外,从 BR v6.5 LTS 版本起已经不再推荐使用BR 的增量备份和增量恢复:https://docs.pingcap.com/zh/tidb/v6.5/br-incremental-guide,推荐使用 PITR 日志来替换增量备份和恢复。

1 个赞

赞👍,后续能修复就好,我基本上就是这种用法,--db, --table不支持正则,使用起来很麻烦。

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