delete语句后怎么恢复?

各位大佬,有个问题,在没有开启binlog和进行br备份时,执行了delete语句删除了全表,请怎么可不可以使用recover table 进行恢复?如果不行,请问怎么恢复数据?

GC未运行之前,可以通过snapshot看到之前的数据

1 个赞

具体怎么操作啊,大佬

https://docs.pingcap.com/zh/tidb/stable/read-historical-data#通过系统变量-tidb_snapshot-读取历史数据

1 个赞


我之前这么操作过,但是前提得GC没有把数据删掉

2 个赞

FLASHBACK TABLE
其功能是在 Garbage Collection (GC) life time 时间内,可以用 FLASHBACK TABLE 语句来恢复被 DROPTRUNCATE 删除的表以及数据。
FLASHBACK TABLE table_name [TO other_table_name]
https://docs.pingcap.com/zh/tidb/stable/sql-statement-flashback-table#flashback-table

1、通过系统变量 tidb_snapshot 读取历史数据

https://docs.pingcap.com/zh/tidb/stable/read-historical-data

设置一个特殊的环境变量,这个是一个 session scope 的变量,其意义为读取这个时间之前的最新的一个版本。

set @@tidb_snapshot=“2016-10-08 16:45:26”;

清空

set @@tidb_snapshot=“”;

set @@tidb_snapshot后执行select 语句就是查这个时间点的数据。

也可以用

select * from table1 as of timestamp ‘2023-07-28 10:24:00’;

但是不能使用insert into select * from 来插入闪回查询的数据,可以使用dumpling来导出指定时间的表

通过tidb_gc_life_time设置 gc时间

set global tidb_gc_life_time=48h;

SELECT * FROM mysql.tidb WHERE variable_name = ‘tikv_gc_safe_point’; 确认可查询时间范围

2、使用dumping工具导出特定时间的数据

如下 备份 dev_vegas2.game_draw 特定时间2023-07-08 10:50:45的 带where条件:

tiup dumpling -uroot -p “XXXX” -P 3390 -h 192.168.24.200 --filetype sql -t 8 -o “/tmp/dumpling” -r 200000 -F256MiB -B dev_vegas2 -T dev_vegas2.game_draw --snapshot “2023-07-28 10:50:45” --where “draw_id = 789”

1 个赞

Garbage Collection (GC) life time 时间内(默认10分钟),使用FLASHBACK TABLE table_name [TO other_table_name]

dumpling添加snapshot参数,可以导出指定时间段数据

这个要看gc有没有运行

这个命令随时准备好,误删数据先调life :grin:

这个怎么操作


flashback命令可以恢复删除的表和库,前提条件是在gc没有清理数据之前,默认情况也就是删除操作之后的10分钟内可以恢复

FLASHBACK TABLE
进行恢复

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