063、故障处理之快速恢复数据

这篇具有很好参考价值的文章主要介绍了063、故障处理之快速恢复数据。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

数据丢失快速恢复的重要性

目的:尽快修复数据,恢复业务
063、故障处理之快速恢复数据,TiDB从入门到精通,tidb,数据库

快速恢复相关技术对比

常用备份恢复技术
063、故障处理之快速恢复数据,TiDB从入门到精通,tidb,数据库

数据快速恢复原理

MVCC 是TiDB数据库原生的一项功能,默认使用无需配置,它使用多个历史快照的方式来维护数据在某个时间点对并发访问的一致性。
063、故障处理之快速恢复数据,TiDB从入门到精通,tidb,数据库

数据恢复前置条件 - GC

SET GLOBAL tidb_gc_life_time = "60m"
-- 查询GC已经清理的时间点
select * from mysql.tidb where variable_name='tikv_gc_safe_point'

063、故障处理之快速恢复数据,TiDB从入门到精通,tidb,数据库

数据快速恢复操作方式

  • dml方式
    • tidb_snapshot 参数
  • ddl方式
    • flashback table ;
    • recover table
  • dml + ddl 方式
    • dumpling 工具

设置tidb_snapshot 参数来读取历史数据

步骤一: 查看历史数据
set @@tidb_snapshot=‘2020-10-10 10:10:10’
步骤二: 对检索的目标结果进行二次处理,应用到目标业务表

flashback table

  1. 查询ddl操作时间戳
admin show ddl jobs
  1. 设置tidb_snapshot
set @@tidb_snapshot='yyyy-mm-dd hh24:mi:ss'
  1. 执行flashback 命令恢复数据
flashback table target_table_name [TO new_table_name]

recover table

  • 适用于drop 操作
recover table table_name;

dumpling – snapshot

  1. 确认目标数据恢复的时间戳
  2. dumpling 备份目标数据历史记录
dumpling -h 172.xx.xx.xx -P 4000 -uroot -p -t 32 -F 64MiB -B target_db --snapshot 'yyyy-mm-dd hh24:mi:ss' -o /tmp/xx
  1. Lighting 导入数据

实验

通过设置tidb_snapshot 参数来读取历史数据后进行恢复
1、建表造数

mysql> create table snap_tab(c int);
Query OK, 0 rows affected (0.19 sec)

mysql> insert into snap_tab values(1),(2),(3);
Query OK, 3 rows affected (0.03 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from snap_tab;
+------+
| c    |
+------+
|    1 |
|    2 |
|    3 |
+------+
3 rows in set (0.01 sec)

2、查看当前时间

mysql> select now();
+---------------------+
| now()               |
+---------------------+
| 2023-07-16 18:36:20 |
+---------------------+
1 row in set (0.01 sec)

3、修改数据

mysql> update snap_tab set c=22 where c=2;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from snap_tab;
+------+
| c    |
+------+
|    1 |
|   22 |
|    3 |
+------+
3 rows in set (0.00 sec)

4、查看gc是否满足要求

查看当前gc的还原点
mysql> select * from mysql.tidb where variable_name = 'tikv_gc_safe_point';
+--------------------+-------------------------+--------------------------------------------------------------+
| VARIABLE_NAME      | VARIABLE_VALUE          | COMMENT                                                      |
+--------------------+-------------------------+--------------------------------------------------------------+
| tikv_gc_safe_point | 20230716-08:58:06 -0400 | All versions after safe point can be accessed. (DO NOT EDIT) |
+--------------------+-------------------------+--------------------------------------------------------------+
1 row in set (0.00 sec)
可以调整gc的范围,放置数据被覆盖
mysql> update mysql.tidb set variable_value='72h' where variable_name='tikv_gc_life_time';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

5、恢复数据

设置恢复的数据时间点
mysql> set @@tidb_snapshot='2023-07-16 18:36:20'; 
Query OK, 0 rows affected (0.00 sec)

mysql> select * from snap_tab;
+------+
| c    |
+------+
|    1 |
|    2 |
|    3 |
+------+
3 rows in set (0.00 sec)

6、清空tidb_snapshot,查看当前时间点

mysql> set @@tidb_snapshot='';
Query OK, 0 rows affected (0.00 sec)

mysql> select * from snap_tab;
+------+
| c    |
+------+
|    1 |
|   22 |
|    3 |
+------+
3 rows in set (0.01 sec)

mysql> select * from mysql.tidb where variable_name='tikv_gc_life_time';
+-------------------+----------------+----------------------------------------------------------------------------------------+
| VARIABLE_NAME     | VARIABLE_VALUE | COMMENT                                                                                |
+-------------------+----------------+----------------------------------------------------------------------------------------+
| tikv_gc_life_time | 72h            | All versions within life time will not be collected by GC, at least 10m, in Go format. |
+-------------------+----------------+----------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

恢复被Truncate的表
通过设置tidb_snapshot参数来读取历史数据,并用dumpling --snapshot和flashback table恢复被多次truncate 的数据。

1、造数
为了实验效果,多次插入数据和多次截断

mysql> create table trun_tab(c int);
Query OK, 0 rows affected (0.51 sec)

mysql> 
mysql> insert into trun_tab values(1),(2),(3);
Query OK, 3 rows affected (0.11 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from trun_tab;
+------+
| c    |
+------+
|    1 |
|    2 |
|    3 |
+------+
3 rows in set (0.01 sec)

mysql> truncate table trn_tab;
ERROR 1146 (42S02): Table 'test.trn_tab' doesn't exist
mysql> truncate table trun_tab;
Query OK, 0 rows affected (0.84 sec)

mysql> select * from trun_tab;
Empty set (0.13 sec)

mysql> insert into trun_tab values(4),(5),(6);
Query OK, 3 rows affected (0.33 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from trun_tab;
+------+
| c    |
+------+
|    4 |
|    5 |
|    6 |
+------+
3 rows in set (0.01 sec)

mysql> truncate table trun_tab;
Query OK, 0 rows affected (0.63 sec)

mysql> insert into trun_tab values(7),(8),(9);
Query OK, 3 rows affected (0.10 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from trun_tab;
+------+
| c    |
+------+
|    7 |
|    8 |
|    9 |
+------+
3 rows in set (0.01 sec)

2、确认是否满足GC要求
通过admin show ddl jobs 查看两次Truncate操作发生的时间

mysql> admin show ddl jobs;
+--------+---------+------------+----------------+--------------+-----------+----------+-----------+---------------------+---------------------+---------------------+--------+
| JOB_ID | DB_NAME | TABLE_NAME | JOB_TYPE       | SCHEMA_STATE | SCHEMA_ID | TABLE_ID | ROW_COUNT | CREATE_TIME         | START_TIME          | END_TIME            | STATE  |
+--------+---------+------------+----------------+--------------+-----------+----------+-----------+---------------------+---------------------+---------------------+--------+
|    119 | test    | trun_tab   | truncate table | public       |         1 |      116 |         0 | 2023-07-16 18:50:52 | 2023-07-16 18:50:52 | 2023-07-16 18:50:52 | synced |
|    117 | test    | trun_tab   | truncate table | public       |         1 |      114 |         0 | 2023-07-16 18:50:17 | 2023-07-16 18:50:17 | 2023-07-16 18:50:18 | synced |
|    115 | test    | trun_tab   | create table   | public       |         1 |      114 |         0 | 2023-07-16 18:49:16 | 2023-07-16 18:49:16 | 2023-07-16 18:49:17 | synced |
|    113 | test    | snap_tab   | create table   | public       |         1 |      112 |         0 | 2023-07-16 18:35:50 | 2023-07-16 18:35:50 | 2023-07-16 18:35:50 | synced |
|    111 | test    | t1         | add index      | public       |         1 |      107 |     10000 | 2023-07-09 04:14:28 | 2023-07-09 04:14:28 | 2023-07-09 04:14:32 | synced |
|    110 | test    | t1         | drop index     | none         |         1 |      107 |         0 | 2023-07-09 04:14:12 | 2023-07-09 04:14:12 | 2023-07-09 04:14:12 | synced |
|    109 | test    | t1         | add index      | public       |         1 |      107 |     10000 | 2023-07-09 04:12:25 | 2023-07-09 04:12:25 | 2023-07-09 04:12:29 | synced |
|    108 | test    | t1         | create table   | public       |         1 |      107 |         0 | 2023-07-09 03:56:43 | 2023-07-09 03:56:43 | 2023-07-09 03:56:43 | synced |
|    106 | test    | t3         | create table   | public       |         1 |      105 |         0 | 2023-07-09 03:41:32 | 2023-07-09 03:49:20 | 2023-07-09 03:49:20 | synced |
|    104 | test    | t1         | drop table     | none         |         1 |       99 |         0 | 2023-07-09 03:39:38 | 2023-07-09 03:49:20 | 2023-07-09 03:49:20 | synced |
+--------+---------+------------+----------------+--------------+-----------+----------+-----------+---------------------+---------------------+---------------------+--------+
10 rows in set (0.25 sec)

可以调整gc interval time,避免数据的mvcc历史版本清理掉,避免数据恢复

mysql> update mysql.tidb set variable_value='72h' where variable_name='tikv_gc_life_time';
Query OK, 0 rows affected (0.00 sec)
Rows matched: 1  Changed: 0  Warnings: 0

mysql> set session tidb_snapshot=“2023-07-16 18:50:16”;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from trun_tab;
±-----+
| c |
±-----+
| 1 |
| 2 |
| 3 |
±-----+
3 rows in set (0.00 sec)

mysql> exit

3、开始恢复数据

mysql> set session tidb_snapshot="2023-07-16 18:50:16";
Query OK, 0 rows affected (0.00 sec)

mysql> select * from trun_tab;
+------+
| c    |
+------+
|    1 |
|    2 |
|    3 |
+------+
3 rows in set (0.00 sec)

恢复第一次Truncate的数据

mysql> flashback table trun_tab to trun_tab_01;
ERROR 1105 (HY000): can not execute write statement when 'tidb_snapshot' is set
因为flashback 语句无法与set tidb_snapshot一起使用。
tiup dumpling -uroot -P4000 -h192.168.16.13 -pAa123ab! --filetype sql -o /tmp/test -r 200000 -F 256MiB -T test.trun_tab --snapshot "2023-07-16 18:50:16"
[root@tidb2 ~]# more /tmp/test/test.trun_tab
test.trun_tab.0000000010000.sql
test.trun_tab-schema.sql
[root@tidb2 ~]# more /tmp/test/test.trun_tab.0000000010000.sql 
/*!40014 SET FOREIGN_KEY_CHECKS=0*/;
/*!40101 SET NAMES binary*/;
INSERT INTO `trun_tab` VALUES
(1),
(2),
(3);
mysql> source /tmp/test/test.trun_tab.0000000010000.sql
Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.01 sec)

Query OK, 3 rows affected (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 0
mysql> select * from trun_tab;
+------+
| c    |
+------+
|    7 |
|    8 |
|    9 |
|    1 |
|    2 |
|    3 |
+------+
6 rows in set (0.01 sec)

6、恢复第二次Truncat的数据文章来源地址https://www.toymoban.com/news/detail-607450.html

mysql> flashback table trun_tab to trun_tab_02;
Query OK, 0 rows affected (0.31 sec)

mysql> select * from trun_tab_02;
+------+
| c    |
+------+
|    4 |
|    5 |
|    6 |
+------+
3 rows in set (0.01 sec)

mysql> insert trun_tab select * from trun_tab_02; 
Query OK, 3 rows affected (0.02 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from trun_tab;
+------+
| c    |
+------+
|    7 |
|    8 |
|    9 |
|    1 |
|    2 |
|    3 |
|    4 |
|    5 |
|    6 |
+------+
9 rows in set (0.00 sec)

mysql> 

到了这里,关于063、故障处理之快速恢复数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 064、故障处理之OMM_TiDB

    oom 内存溢出,内存泄漏,相当于TiDB不能用了 TiDB Server上的业务SQL会失败 业务响应时间升高 前端体验变差 客户端应用 日志 dmesg -T | grep tidb-server 结果中有事故发生的附近时间点的OOM-killer的日志 tidb.log(事故发生后附近时间的\\\"Welcome to TiDB的日志\\\" 即TiDB server发生的重启) tidb_st

    2024年02月15日
    浏览(35)
  • FANUC机器人PRIO-063故障报警原因分析及解决办法

    如下图所示, 机器人示教器上出现故障代码:PRIO-063 这个定义不适当:RACK 102 SLOT 1 此时,我们查阅维修手册,可以看到如下所示的 故障原因说明 : 根据以上提供的可能的原因进行分析 : 机架102 插槽1的配置不正常,导致出现PRIO-063的故障报警 其中, 机架102指的是PROFINET通

    2024年02月05日
    浏览(474)
  • ORACLE之rman备份恢复及故障处理

    一、参数文件恢复 1.1 首先查看归档模式是否打开 1.2 关闭数据库 1.3 将数据库启动到mount状态 1.4 开启归档 1.5 设置归档路径 1.6 查看归档信息 1.7 打开数据库 1.8 打开控制文件自动备份设置 (备份任意文件都会自动备份控制文件。) 1.9 备份全库 1.10 备份spfile 若spfile文件损坏并

    2024年02月01日
    浏览(45)
  • 精通 JavaScript 数据处理大全:手写代码从入门到精通

    ​🌈个人主页:前端青山 🔥系列专栏:JavaScript篇 🔖 人终将被年少不可得之物困其一生 依旧 青山 ,本期给大家带来JavaScript篇专栏内容:JavaScript- 数据处理 目录 1. 实现日期格式化函数 2. 交换a,b的值,不能用临时变量 3. 实现数组的乱序输出 4. 实现数组元素求和 5. 实现数组

    2024年02月03日
    浏览(44)
  • pandas由入门到精通-数据处理

    文中用S代指Series,用Df代指DataFrame 数据清洗是处理大型复杂情况数据必不可少的步骤,这里总结一些数据清洗的常用方法:包括缺失值、重复值、异常值处理,数据类型统计,分箱,随机采样,向量化编码等方法。每种方法都给出了代码和实例,并用表格进行总结。 判断D

    2024年02月11日
    浏览(46)
  • 大数据分布式实时大数据处理框架Storm,入门到精通!

    介绍:Storm是一个分布式实时大数据处理框架,被业界称为实时版的Hadoop。 首先,Storm由Twitter开源,它解决了Hadoop MapReduce在处理实时数据方面的高延迟问题。Storm的设计目标是保证数据的实时处理,它可以在数据流入系统的同时进行处理,这与传统的先存储后处理的关系型数

    2024年01月23日
    浏览(53)
  • 【vsan数据恢复】vsan逻辑架构出现故障的数据恢复案例

    VSAN数据恢复环境: 一套有三台服务器节点的VSAN超融合基础架构,每台服务器节点上配置2块SSD硬盘和4块机械硬盘。 每个服务器节点上配置有两个磁盘组,每个磁盘组使用1个SSD硬盘作为缓存盘,2个机械硬盘作为容量盘。三台服务器节点上共配置6个磁盘组,共同组成VSAN存储空

    2024年01月19日
    浏览(35)
  • 服务器数据恢复-EVA存储磁盘故障导致存储崩溃的数据恢复案例

    EVA系列存储是一款以虚拟化存储为实现目的的中高端存储设备。EVA存储中的数据在EVA存储设备工作过程中会不断进行迁移,如果运行的任务比较复杂,EVA存储磁盘负载加重,很容易出现故障的。EVA存储通过大量磁盘的冗余空间和故障后rss冗余磁盘动态迁移来保护存储中的数据

    2024年02月11日
    浏览(49)
  • HBase的数据高可用与自动故障恢复

    HBase是一个分布式、可扩展、高性能的列式存储系统,基于Google的Bigtable设计。它是Hadoop生态系统的一部分,可以与HDFS、MapReduce、ZooKeeper等组件集成。HBase具有高可用性、高性能和自动故障恢复等特点,适用于大规模数据存储和实时数据处理。 在现代互联网应用中,数据高可

    2024年02月21日
    浏览(33)
  • 服务器数据恢复-V7000存储2块磁盘故障脱机的数据恢复案例

    服务器数据恢复环境: P740+AIX+Sybase+V7000存储,存储阵列柜上共12块SAS机械硬盘(其中一块为热备盘)。 服务器故障: 存储阵列柜中有磁盘出现故障,工作人员发现后更换磁盘,新更换的磁盘数据同步到40%左右时,阵列柜中的另一块磁盘也出现问题,数据同步中断,逻辑盘无

    2024年02月07日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包