一 简介:今天聊聊如何加速恢复你的数据
二 背景:上篇讲到数据恢复的重要性和一般思路.今天讲讲应该怎么做三 角度: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即可