tidb有好的工具针对单表进行上一次执行的错误的sql,进行快速回滚操作吗

发现tidb的tiup的全库备份然后再还原对应库中对应表,一个是负载很高,1000w的数据内存基本就跑死了,线上的话都不敢用这个,在一个就是 需要表不存在,意味着需要rename表(1000w数据的话,rename也会报内存错误,无法跑完),那只能删除表,然后再利用全量备份恢复对应的表,需要停业务

你用什么做备份的?dumpling吗

tiup br 备份的应用库

如果在gc范围内,用闪回啊

TiDB的MVCC机制,只要未被GC前,就可以保证你的数据恢复到期间的任意一个时刻的版本。

看看官网闪回flashback和恢复recover 的功能特性吧,应该会对你有很大的启发

1 个赞

在gc时间内的话:
dml操作的话,直接set @@tidb_snapshot=“2016-10-08 16:45:26”;—异常sql执行前的时间点,然后dumpling对象的表,再导入即可
ddl操作的话,DROP TABLE t;就FLASHBACK TABLE t; TRUNCATE TABLE t;就FLASHBACK TABLE t TO t1;即可

1 个赞

好的 多谢

官方警告:
在 TiDB v7.1.0 中使用该功能可能会出现 FLASHBACK 完成后部分 Region 仍处于 FLASHBACK 过程中的问题。请尽量避免在 v7.1.0 中使用该功能。
恰好用的最新的7.1.0,这个真的 是碰上了

问题是 flashback 不能指定表,所有表都会受影响

只要被 DROPTRUNCATE 删除的表是在 tikv_gc_safe_point 时间之后,都能用 FLASHBACK TABLE 语法来恢复

https://docs.pingcap.com/zh/tidb/v7.2/sql-statement-flashback-table#flashback-table

没有,闪回。

嗯 但是如果只是 delete table1中部分数据呢FLASHBACK CLUSTER TO TIMESTAMP ‘2023-07-27 14:37:30’; 是整个集群的表都会 back到 2023-07-27 14:37:30 这个时间点,那么其他表库 其他表也会受影响

验证了下 确实是 因为再safe point到 你要 flashback的这个时间点 你的其他表 肯定一直有业务上的插入,那么要是用 FLASHBACK CLUSTER TO TIMESTAMP ‘2023-07-27 14:37:30’; 来恢复到某个节点,其他表确实也会被back,这个感觉还是慎用吧

求救 这种情况还有方式吗 就只想 对单表上次的变更 删除 做back,tidb的flashback可以吗?

FLASHBACK 支持只闪回某个库或某个表的,建议你先仔细看下官网的各个文档。

可以用 FLASHBACK TABLE 语句来恢复被 DROPTRUNCATE 删除的表以及数据。
可以用 FLASHBACK DATABASE 语句来恢复被 DROP 删除的数据库以及数据。
可以用FLASHBACK CLUSTER TO TIMESTAMP 将集群的数据恢复到特定的时间点。

是的 你说的是对的 大佬 ,我再寻求 一个 back table xxx to time xxx 的一个工具或者命令,看似是没有

用来回滚特定表的变更到上一个时间节点,好像没有这个回滚或者还原命令或者 工具

这样看来 就是 tiup br 比较好用了 因为它可以再执行单表变更前,全备或者单表备份,有问题可以通过全备或者单表的备份来只restore 单表,测试过 全备backup快照到自建s3时间就一分钟左右,单表restore到tidb就十秒,只是遇到一个问题 1000w数据量的 单表 在restore的时候,需要这个表明不存在,但是不想删除这个表,就只能rename,这个rename时间是比较久的 而且很吃内存,甚至oom报错

tidb 也可以通过系统变量 tidb_snapshot 读取历史数据,可以先看看这块的内容。

还可以使用 Stale Read 功能读取历史数据,Stale Read 是一种读取历史数据版本的机制,可以读取 TiDB 中存储的任意一个时间点的历史数据版本(只要还未被GC)。官方也更推荐使用 Stale Read 读取历史数据

1 个赞

好哒好的,刚接触tidb不久 多谢大佬指点