admin管理员组文章数量:1583042
一、背景
在日常的操作中难免有些误操作,那这时候有什么办法,不通的数据库有不同的办法,多数是用备份恢复,还有一些其他特有的方法,如mysql的binlog,那么tidb有什么特有的方法呢,下面来介绍下
二、环境准备
# 建表和准备数据
create table recover_test(id int(10));
insert into recover_test values(1),(2),(3),(4);
# 查看gc相关参数,tikv_gc_life_time,tikv_gc_safe_point,tikv_gc_safe_point
select * from mysql.tidb where VARIABLE_NAME like '%gc%';
tikv_gc_life_time
三、恢复方法
1.flashback
描述: DROP 或 TRUNCATE 删除的表是在 tikv_gc_safe_point 时间之后,都能用 FLASHBACK TABLE 语法来恢复。
注意: 下游是mysql的时候会因为mysql不支持该语法造成cdc或者binlog同步失败
# 清空表
truncate table recover_test;
# 恢复表数据
flashback table recover_test to recover_test_1;
# 删除表
drop table recover_test;
# 恢复表
flashback table recover_test;
# 第二次恢复表,可以看到下面有个报错,因为 FLASHBACK 所恢复表的 table ID 还是被删除表的 table ID,而 TiDB 要求所有还存在的表 table ID 必须全局唯一,所以删除一次表,不能恢复两次
flashback table recover_test to recover_test_2;
ERROR 1050 (42S01): Table 'recover_test' already been flashback to 'recover_test', can't be flashback repeatedly
2.recover
描述: DROP 删除的表是在 tikv_gc_safe_point 时间之后,用recover 语法来恢复。
注意: 下游是mysql的时候会因为mysql不支持该语法造成cdc或者binlog同步失败
# 删除表
drop table recover_test;
# 恢复表
recover table recover_test;
3.dumpling --snapshot
描述: dml更新表或者drop,truncaate是在 tikv_gc_safe_point 时间之后,用snapshot语法来恢复。
# 删除数据
delete from recover_test where id = 3;
# 导出快照时间,注意该时间要大于tikv_gc_safe_point
dumpling --snapshot "2022-06-02 17:12:45"
# 导入导出的文件
lighting ...
4.select into outfile
描述: dml更新表或者drop,truncaate是在 tikv_gc_safe_point 时间之后,用snapshot语法来恢复。
# 删除数据
delete from recover_test where id = 3;
# 设置快照时间
set @@tidb_snapshot="2022-06-02 15:50:26";
# select into outfile导出,注意,连接的是哪个tidb,导出文件的位置就在哪个tidb上
select * from recover_test into outfile '/data/tidb/a.txt';
# 导入数据
load data ...
5.历史备份恢复
lighting
br
版权声明:本文标题:tidb-数据误删恢复的几种方式 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dianzi/1726034932a1052819.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论