一 简介:今天聊聊如何加速恢复你的数据
二 背景:上篇讲到数据恢复的重要性和一般思路.今天讲讲应该怎么做
三 角度:
1 方案1: 设定延迟时间,建立延时库
恢复步骤:1 分析binlog确认误操作时间
2 延时库进行指定节点复制
普通复制 start slave until MASTER_LOG_FILE ='Relay_Master_Log_File', MASTER_LOG_POS =Exec_Master_Log_Pos;
GTID复制 start slave until SQL_BEFORE_GTIDS ='96359478-a845-11e6-a3d6-000c296e817a:44';
3 导出数据
优势:能恢复DDL操作
时间耗时:看你的延时设置时间,如果时间短,那么恢复迅速
缺点:需要付出硬件成本,增加维护成本
2 方案2: 利用备份进行恢复
恢复步骤: 1 解压当天的全量备份
2 分析binlog确认误操作时间
3 建立恢复实例
方法1 1 在从库设置过滤规则,只同步指定的库表,加快恢复速度
2 从库复制到指定位置后停止复制
3 导出数据
方法2 1 利用备份binlog进行db级别的binlog恢复
2 导出数据
优势:能恢复DDL操作
时间耗时:时间耗费在解压备份和数据同步上
3 方案3:完全依赖第三方工具binlog2sql/MyFlash等开源工具
恢复步骤: 1 利用开源工具分析binlog并生成回滚语句
2 将回归语句应用到测试环境
3 没有问题再导入线上
优势:1速度快,能实现精确表的各种过滤操作
缺点:不支持DDL回滚
4 方案4:预防性工具inception
简介:通过inception操作的DML语句能实现自动生成回滚语句,非常方便,省去了分析binlog的操作
优势:自动生成恢复数据
缺点: 1 不支持DDL操作 2只能预防研发人员进行操作 3 本身有限制(比如不支持子查询的DML操作)
四 总结
1 恢复数据一定要先在测试环境检测,防止线上数据被二次破坏
2 方案4能预防很大一部分的误操作,建议使用,对于DDL操作回滚,只能依靠备份进行恢复了
3 日常备份binlog是非常有必要的
4 利用表空间迁移数据加快数据的恢复速度
五 思考问题:
如何能恢复一周前的数据呢
采用一周前的全备+当天的binlog即可