码迷,mamicode.com
首页 > 数据库 > 详细

mysql第七篇文章~咱们来谈谈数据恢复如何

时间:2017-10-02 16:44:15      阅读:291      评论:0      收藏:0      [点我收藏+]

标签:/usr   读取   注意   mysq   问题   rac   ack   手动   性能   

简介:数据恢复乃是DBA做的次数不多,但是极为重要的工作,谈谈我得理解

背景:数据误操作大体上可以分为两类

       1 DML操作(比如不加条件的更新删除)

       2 DDL操作(比如增加减少字段甚至truncate甚至drop表)

一 针对方法:

       1 针对操作:

              1 设置延时库,延时设置时间看线上要求,数据变更频率,推荐不超过5小时.

                 延时库:1实际上不论 mysql还是mongo,oracle,都有办法设置延时库,用于对于误操作的恢复。此操作极为快捷,省去了对于binlog解析恢复数据的问题

                             2设置方法: 1 stop slave

                                               2 CHANGE MASTER TO MASTER_DELAY = N(秒数);

                                               3 start slave

                                               4 show slave status  sql_delay即是你设置的值

                             3 恢复方法:1确定误操作的postion,将延时库取消延迟,应用数据

                                                 2 注意关注读取的position,直到误操作position之前,停止复制进程

                                                 3 进行表的导出和导入

                                                 4 研发确定数据的有效性

                             4 缺点: 1 依赖于延时机器物理机器应用日志的速度(机器性能差的时候恢复慢),建议将延时库设置在机器性能非常好,减少恢复时间

                2 采用 binlog2sql解析

                   实际上开源众多的软件早已实现解析binlog提取指定表语句的工具,在此我强烈推荐这款

                  1 如何安装

                           1 yum -y install git python-pip  MySQLdb

                            2 git clone https://github.com/danfengcao/binlog2sql.git && cd binlog2sql

                            3 pip install -r requirements.txt

                  2 创建相应用户和权限:

                          GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO  三种权限即可 

                  3  恢复方法

                     0 准备工作:

                                   1 最好准备一台性能好的机器专门做数据恢复

                                   2 此台机器对于线上所有主库都拥有上面三个权限的用户

                                   3 当发生误操作时候,主库手动flush logs,并将误操作binlog拷贝到这台机器上(不建议直接在主库上做)

                     1 解析binlog 

                      python binlog2sql.py  -h127.0.0.1 -P3306 -utest_all -p123456 -d库 -t表 --start-file=误操作binlog文件 --stop-file 

          2 生成回滚语句

                      python binlog2sql.py  --flashback -h127.0.0.1 -P3306 -utest_all -p123456 -d库 -t表 --start-file=误操作binlog文件 --stop-file 

                      注意点:1 start-file和stop-file此处千万不要加路径 ,否则会提示file is not in mysql server,因为是通过show命令获得的

                     3 将生成的sql回滚语句应用库上

                     4  研发确认数据的有效性

                  4 优势与不足 

                      优势:1 可以解读代码进行拍错和解读,甚至重写(毕竟是py,好理解)

                               2 使用简单,常用命令能很快熟悉

                               3 此工具已被众多业界DBA使用,我也在使用

                      不足: 1 binlog2sql.py对比mysqlbinlog分析效率逊色不少,所以分析速度不是很快

                               2 参数 binlog_row_image 必须为FULL,暂不支持MINIMAL

                               3 此项其实不算缺点,对于此类恢复工具,对于DDL操作是都不支持的(DDL是在binlog中不会记录影响的数据)。实际上 DDL的有些操作通过工具确实没办法实现恢复(比如drop table,如果想恢复就得找这张表所有的binlog扫描恢复,显然这是不可能的,有很多线上binlog会定期清理)

         3 普通恢复方法:

                      核心思想:昨日备份+今日binlog(误操作前)

                               方法:1 xtarbackup备份进行恢复建立恢复实例(恢复方法不再阐述),并查看当时备份点的filename+position

         j                               2 确定2个position 1:恢复实例所需要的positon 2 误操作之前的positon

                                        2 误操作后进行flush logs,将(备份需要的+误操作的)两者binlog进行拷贝到恢复机器上,

                                        3 mysqlbinlog --start-position=368315 /usr/local/mysql/data/binlog.123456 | mysql -u root -p password

                                         先应用恢复实例的binlog,再应用误操作之前的binlog

                                        4 进行 表的查看 导出与导入

                                        5  研发确认数据是否正常

                               缺点: 1 备份文件恢复的速度所耗费时间 恢复实例所应用binlog所耗费时间,想想看如果一个超级大的备份,线上切换了很多次binlog,这恢复速度恐怕任何人都不能接受 吧 

          4 一款强大的审核和回滚语句工具:inception

                  关于这款工具我在此处就不细说了,等以后有机会,我会出一个系列的文章进行介绍,这里先简单说下它的三个核心功能

                   1 强大的审核机制,丰富的规则组合

                   2 对于每一个sql执行都会生成相应的回滚语句(对于恢复很容易吧)

                   3 可以调用第三方工具pt-osc

                              

 二   总结:核心问题

         恢复数据 1 要快 2 要准,估算你的恢复时间,然后给研发一个准确的答复,这才是一个专业DBA所要具备的,如何估算你的恢复时间呢,如果有朋友有这方面的想法,可以在博客下方留言或者加我的QQ 390148350,可以详谈,我会进行补充               

 

\

 


 

       

mysql第七篇文章~咱们来谈谈数据恢复如何

标签:/usr   读取   注意   mysq   问题   rac   ack   手动   性能   

原文地址:http://www.cnblogs.com/danhuangpai/p/7620279.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!