首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
30 篇文章
1
迁移到MySQL的业务架构演进实战
2
如何优化MySQL千万级大表,我写了6000字的解读
3
MySQL中的SQL优化建议那么多,该如何有的放矢
4
说几点关于数据库的见解
5
迁移至MySQL的数据流转流程优化
6
引入TiDB方案的一些思考
7
MySQL数据克隆的用户权限设计
8
MySQL逻辑数据恢复体系的设计
9
MySQL随机恢复的设计思路
10
从Oracle到MySQL,金融核心场景在线换库落地实战
11
基于Maxwell的MySQL数据传输服务整体设计
12
MySQL数据库升级的一些坑
13
数据架构选型必读:4月数据库产品技术解析
14
基于数据库中间件配置的几类问题
15
关于中间件服务的配置管理,分为5个阶段
16
MySQL中10多张表关联要做优化,怎么理解逻辑幂等
17
关于MySQL拓扑关系的梳理
18
对于新技术栈落地和架构思维的建议
19
MyCAT让人诟病的配置文件,说说破局的思路
20
MySQL多活数据消费服务设计方案
21
数据双向复制中的6个数据冲突场景和解决思路
22
MySQL双主模式下是如何避免数据回环冲突的
23
一个MySQL服务CPU 100%的优化案例反思
24
MySQL表添加了一个字段,竟然导致数据无法写入,反思
25
MySQL周期表管理太繁琐,通过Python自定义工具方法优雅解决
26
MySQL业务双活的初步设计方案
27
数据库修改密码风险高,如何保证业务持续,这几种密码双活方案可以参考
28
一道经典的MySQL面试题,答案出现三次反转
29
​业务双活的数据切换思路设计(下)
30
基于Consul的MySQL高可用服务,健康检查怎么做?这里有一个完整脚本

MySQL随机恢复的设计思路

如果没有恢复场景,备份就失去了业务价值,毕竟单纯靠业务价值一把尺子就衡量系统建设其实是不公平的,但是如果数据没有恢复成功,备份就失去了任何价值

数据库这个圈子,其实比较垂直,能叫出名字的就是那么些人,所以数据恢复是一个很差的标签,而且删库跑路也是行不通的。

我们可以以退为进,把一些工作转变为主动。假设我有1000台数据库实例,其中从库和单实例节点有500个,那么如何保障这500个数据库实例的数据可以恢复,在可以恢复的前提下,如何提高恢复效率,然后整体上来看,如何综合提升备份效率,备份任务调度,如何通过增量来落实“一次全量,永远增量”的设计模式,这些措施都会有改进,但是对于数据恢复效率还是很难保证的。

比如下面的场景:

1)数据库参数配置不规范,/etc/my.cnf和/data/mysql_xxx/my.cnf的配置不匹配,导致实例启动失败

2)数据库版本差异化,比如主流支持是5.7,突然冒出来一个5.6的版本

3)binlog解析出错,导致后续恢复失败

4)备份集恢复出错,导致整体恢复失败

如此种种的案例数不胜数,稍有不慎,就难以恢复,而像配置类的问题,虽然可以解决,但是在紧急情况下,恢复流程失败,很难保证有良好的心态能够快速解决,所以对于恢复质量的检验是过去我们一直在犯的错误:我们一直在完善备份,但是对于恢复侧却少有关注,认为应该是可以的,恰恰是这个应该会把我们拖入被动局面。

所以我冒出来一个随机恢复的想法,还是假设有500个实例,那么这些实例如果我们一一恢复,每天的工作量是很庞大的,而且对系统的负载也很高,所以如果我们把风险和成本做一个综合,这个工作的效率和意义就会很明显。

目前的恢复主要有基于备份集恢复,基于时间点恢复,对象粒度的恢复和表结构恢复,我们通常所说的系统层恢复主要是基于备份集恢复和基于时间点恢复。

为此我设计和实现了如下的基本流程:

需要补充的是,随机时间是在备份集的时间周期内,而随机时间戳,则是按照近24小时内的一个随机时间点。

所以多次随机,能够让这个事情的判断会更加明确,恢复质量一目了然。

在这个基础上还需要一系列的事情:

1)随机需要保证在一定的时间范围内,所有实例都能够覆盖到

2)对恢复机进行线性扩展,比如提供一个恢复服务器组,可以在上面并行的跑一些恢复任务,提高恢复响应效率

3)对恢复结果进行日报可视化,恢复了哪些,效率如何,对一定时间周期内的恢复结果进行汇总和复盘

4)根据推断统计的思维,采取一定样本的数据,通过假设检验,建立相应的数据模型来进行检验和分析

下一篇
举报
领券