zoukankan      html  css  js  c++  java
  • Mysql利用binlog日志恢复数据操作(转)

    a.开启binlog日志:
    1)编辑打开mysql配置文件/etc/mys.cnf
    [root@vm-002 ~]# vim /etc/my.cnf
    在[mysqld] 区块添加 
    log-bin=mysql-bin 确认是打开状态(mysql-bin 是日志的基本名或前缀名);

    b.

    下面开始进行场景模拟:
    1)
    ops库会在每天凌晨4点进行一次完全备份的定时计划任务

    这里手动执行下,将ops数据库备份到/opt/backup/ops_$(date +%F).sql.gz文件中:
    [root@vm-002 ~]# mysqldump -uroot -p -B -F -R -x --master-data=2 ops|gzip >/opt/backup/ops_$(date +%F).sql.gz
    Enter password: 
    [root@vm-002 ~]# ls /opt/backup/
    ops_2016-09-25.sql.gz
    -----------------
    参数说明:
    -B:指定数据库
    -F:刷新日志
    -R:备份存储过程等
    -x:锁表
    --master-data:在备份语句里添加CHANGE MASTER语句以及binlog文件及位置点信息

    c.不小心删库了

    先仔细查看最后一个binlog日志,并记录下关键的pos点,到底是哪个pos点的操作导致了数据库的破坏(通常在最后几步);

    接着执行一次刷新日志索引操作,重新开始新的binlog日志记录文件。按理说mysql-bin.000003
    这个文件不会再有后续写入了,因为便于我们分析原因及查找ops节点,以后所有数据库操作都会写入到下一个日志文件。
    mysql> flush logs;

    show master status;

    mysql-bin.000004 | 106 | | |

    d.读取binlog,分析问题

    方法一:使用mysqlbinlog读取binlog日志:
    [root@vm-002 ~]# cd /var/lib/mysql/
    [root@vm-002 mysql]# mysqlbinlog mysql-bin.000003

    方法二:登录服务器,并查看(推荐此种方法)
    mysql> show binlog events in 'mysql-bin.000003';

    | mysql-bin.000003 | 875 | Query | 1 | 954 | drop database ops |

    通过分析,造成数据库破坏的pos点区间是介于 875--954 之间(这是按照日志区间的pos节点算的),只要恢复到875前就可。

    小结:实际是将读出的binlog日志内容,通过管道符传递给mysql命令。这些命令、文件尽量写成绝对路径;

    a)完全恢复(需要手动vim编辑mysql-bin.000003,将那条drop语句剔除掉)
    [root@vm-002 backup]# /usr/bin/mysqlbinlog /var/lib/mysql/mysql-bin.000003 | /usr/bin/mysql -uroot -p123456 -v ops

    b)指定pos结束点恢复(部分恢复):
    --stop-position=471 pos结束节点(按照事务区间算,是471)
    注意:
    此pos结束节点介于“member表原始数据”与更新“name='李四'”之前的数据,这样就可以恢复到更改“name='李四'”之前的数据了。
    操作如下:
    [root@vm-002 ~]# /usr/bin/mysqlbinlog --stop-position=471 --database=ops /var/lib/mysql/mysql-bin.000003 | /usr/bin/mysql -uroot -p123456 -v ops

    参考:

    Mysql之binlog日志说明及利用binlog日志恢复数据操作记录 - 散尽浮华 - 博客园
    http://www.cnblogs.com/kevingrace/p/5907254.html

  • 相关阅读:
    Js特效总结
    asp.net中的绝对路径和相对路径
    GrideView合并列合并序号,隐藏某列按钮
    WebConfig 配置文件详解
    ASP.NET打印EXCEl报表技术总结
    ADO.NET DataSet、DataTable、DataRow、DataView的学习
    asp.netGridView使用技巧
    .net Remoting
    C# webservice开发
    js实现网页打印分页打印
  • 原文地址:https://www.cnblogs.com/hixiaowei/p/9006008.html
Copyright © 2011-2022 走看看