Tidb数据恢复
表删除delete删除恢复(误删除)
指定时间查询 恢复
#恢复数据
#查看安全点
select * from mysql.tidb where variable_name='tikv_gc_safe_point';
#安全时间
select * from mysql.tidb where variable_name= 'tikv_gc_life_time';
#避免操作过慢 延长安全时间
update mysql.tidb set variable_value= '36h' where variable_name='tikv_gc_life_time';
select * from order as of timestamp '2024-11-11 19:04:00';
select a.* FROM (
select *
FROM order a as of timestamp '2024-11-11 19:04:00') a
WHERE a.CREATE_DATE >= DATE_FORMAT(CURDATE(), '%Y-%m-%d')
ORDER BY a.CREATE_DATE DESC;
设置历史时间回滚
#恢复数据
# 查看安全点
select * from mysql.tidb where variable_name='tikv_gc_safe_point';
# 备份安全时间点
select * from mysql.tidb where variable_name= 'tikv_gc_life_time';
#避免操作过慢
update mysql.tidb set variable_value= '36h' where variable_name='tikv_gc_life_time';
# 设置时间历史时间
set @@tidb_snapshot="2024-11-11 12:49:32";
select * from order;
# 回滚数据后
#把tidb_snapshot设置成当前的时间,为空就是当前时间
set @@tidb_snapshot="";
select * from order;
#还原到最初的设置 备份安全时间点
update mysql.tidb set variable_value= '10m0s' where variable_name='tikv_gc_life_time';
select * from mysql.tidb where variable_name= 'tikv_gc_life_time';
select * from order;
DDL数据回滚(误清空表)
模式删除数据操作
#模式删除数据
truncate table order;
insert into order values(1),(2),(3);
truncate table order;
insert into order values(4),(5),(6);
select * from order;
mysql> select * from order;
+------+
| c |
+------+
| 4 |
| 5 |
| 6 |
+------+
3 rows in set (0.01 sec)
恢复数据
#恢复数据
admin show ddl jobs where table_name='t_tc_order_row';
select * from order;
truncate table order; # 20:42:22
#查看安全点的时间
select * from mysql.tidb where variable_name='tikv_gc_safe_point';
select * from mysql.tidb where variable_name= 'tikv_gc_life_time';
#设置gc清理时间
update mysql.tidb set variable_value= '36h' where variable_name='tikv_gc_life_time';
truncate table order; # 20:42:23
#设置第一个truncate table往前一点点的恢复时间
set @@tidb_snapshot="2024-11-11 20:42:22";
select * from order;
#恢复上一个truncate数据
# 方法一:重复使用dumpling设置不同的snapshot
tiup dumpling -uroot -p'123456' -P4000 --host 192.168.1.1 --filetype sql -o /tmp/test1 -r 200000 -F 256MiB -T test.trun_tab --snapshot "2024-11-11 20:42:22";
# 方法二:
set @@tidb_snapshot="";
# 回溯表数据
flashback table order to trun_tab_02
# 回溯时间
# flashback TABLE order TO TIMESTAMP '2024-11-11 20:42:22';
select * from order;
# 查看版本
SELECT tidb_version();
#恢复默认设置
update mysql.tidb set variable_value= '1h' where variable_name='tikv_gc_life_time';
select * from mysql.tidb where variable_name= 'tikv_gc_life_time';