zoukankan      html  css  js  c++  java
  • mysql通过binlog恢复数据

    如果mysql不小心操作失误导致数据错误或者丢失这时候binlog起到了很大的作用
    恢复有几种方式
    1.按时间恢复--start-datetime
     
    如果确定了时间点,那么按时间恢复是一个再好不过的事,一般是通过日常的定期备份+差异备份(日志)
    如果日常备份在4点,出错的时间在12:00点,12:30发现的,首先我们要确认12点出了什么错,12点以后的数据还能不能继续使用,如果不影响,那么我们只需跳过12:00执行的数据即可
    首先,恢复4点的备份
    然后,通过binlog获取4点到11:59的数据,获取的数据可以直接作用到数据库中,避免二次污染,最好先生成sql文件
     mysqlbinlog --start-datetime="2014-11-07 04:01:00"  --stop-datetime="2014-11-07 11:59:00" /data/mysql/data/mysql-bin.000020 >/home/madong/aa.sql
    在获取12:01-12:30的数据
     mysqlbinlog --start-datetime="2014-11-07 12:01:00"  --stop-datetime="2014-11-07 12:30:00" /data/mysql/data/mysql-bin.000020 >>/home/madong/aa.sql
    最后通过mysql命令行
    source   /home/madong/aa.sql
     
    如果12点以后的数据还不能继续使用
    那么我们只需要恢复到12点,12:00-12:30的数据就不需要恢复
    2.通过--start-position节点
    思路和上面的一样,首先要确定节点的id,在恢复
     
     
    例:
    描述:2014-11-07 13:50 游戏数据库数据全部清空
    故障发现时间:13:50
    故障发生时间:13:40左右
    故障结束时间:15:55
    恢复过程:
    故障触发,游戏马上关服,进行维护,故障原因已知(数据没了)
    1.首先确认恢复时间点
    恢复带2014-11-07 13:30
    2.因为刚开服不久,所以准备从最原始开始恢复,不从4点的完整备份节点恢复
    准备不直接操作,先生成sql,
     mysqlbinlog --start-datetime="2014-11-06 09:50:00"  --stop-datetime="2014-11-07 13:30:00" /data/mysql/data/mysql-bin.000020 >/home/madong/aa.sql
    (aa.sql 500M左右)
    3.因数据库重置之后又有玩家注册,如果导入数据会出现主键冲突,所以再次清空数据库(保留基表数据)
    4.导入sql
    进入mysql命令行,并切换数据库(use DBNAME)
    source /home/madong/aa.sql
    执行开始时间14:57
    结束时间15:54  大约一个小时
  • 相关阅读:
    Two strings CodeForces
    Dasha and Photos CodeForces
    Largest Beautiful Number CodeForces
    Timetable CodeForces
    Financiers Game CodeForces
    AC日记——整理药名 openjudge 1.7 15
    AC日记——大小写字母互换 openjudge 1.7 14
    AC日记——将字符串中的小写字母换成大写字母 openjudge 1.7 13
    AC日记——加密的病历单 openjudge 1.7 12
    AC日记——潜伏着 openjudge 1.7 11
  • 原文地址:https://www.cnblogs.com/liuyisai/p/5621909.html
Copyright © 2011-2022 走看看