基于binlog二进制日志的MySQL恢复笔记

刚好复习到这里,顺手做个小实验,记录下。

总的操作流程:

step0、关掉数据库的对外访问【防止用户操作继续写入这个库】

step1、mysqlbinlog 导出相关时间段数据库的二进制日志

step2、编辑today.sql找到误操作的那几条数据,删除并保存。

step3、执行全备份恢复 mysql -e 'source /root/backup.sql;'

step4、用二进制日志恢复今天的修改 mysql -e 'source /root/today.sql;'

step5、登录mysql,验证数据是否回来了。

原始数据库某表的内容如下:

MariaDB [hellodb]> select * from students;

+-------+---------------+-----+--------+---------+-----------+

| StuID | Name          | Age | Gender | ClassID | TeacherID |

+-------+---------------+-----+--------+---------+-----------+

|     1 | Shi Zhongyu   |  22 | M      |       2 |         3 |

|     2 | Shi Potian    |  22 | M      |       1 |         7 |

|     3 | Xie Yanke     |  53 | M      |       2 |        16 |

|     4 | Ding Dian     |  32 | M      |       4 |         4 |

|     5 | Yu Yutong     |  26 | M      |       3 |         1 |

|     6 | Shi Qing      |  46 | M      |       5 |      NULL |

|     7 | Xi Ren        |  19 | F      |       3 |      NULL |

|     8 | Lin Daiyu     |  17 | F      |       7 |      NULL |

|     9 | Ren Yingying  |  20 | F      |       6 |      NULL |

|    10 | Yue Lingshan  |  19 | F      |       3 |      NULL |

|    11 | Yuan Chengzhi |  23 | M      |       6 |      NULL |

|    12 | Wen Qingqing  |  19 | F      |       1 |      NULL |

|    13 | Tian Boguang  |  33 | M      |       2 |      NULL |

|    14 | Lu Wushuang   |  17 | F      |       3 |      NULL |

|    15 | Duan Yu       |  19 | M      |       4 |      NULL |

+-------+---------------+-----+--------+---------+-----------+

备份了下数据,备份为backup.sql,模拟当做前一天的全备份文件。

然后随便进行了一些操作,如下:INSERT INTO students VALUES(30,'lee',21,'M',2,1);

DELETE FROM students where `StuID`=10;

update students set age=10 where `StuID`=1;

执行后效果如下:

MariaDB [hellodb]> select * from students;

+-------+---------------+-----+--------+---------+-----------+

| StuID | Name          | Age | Gender | ClassID | TeacherID |

+-------+---------------+-----+--------+---------+-----------+

|     1 | Shi Zhongyu   |  10 | M      |       2 |         3 |

|     2 | Shi Potian    |  22 | M      |       1 |         7 |

|     3 | Xie Yanke     |  53 | M      |       2 |        16 |

|     4 | Ding Dian     |  32 | M      |       4 |         4 |

|     5 | Yu Yutong     |  26 | M      |       3 |         1 |

|     6 | Shi Qing      |  46 | M      |       5 |      NULL |

|     7 | Xi Ren        |  19 | F      |       3 |      NULL |

|     8 | Lin Daiyu     |  17 | F      |       7 |      NULL |

|     9 | Ren Yingying  |  20 | F      |       6 |      NULL |

|    11 | Yuan Chengzhi |  23 | M      |       6 |      NULL |

|    12 | Wen Qingqing  |  19 | F      |       1 |      NULL |

|    13 | Tian Boguang  |  33 | M      |       2 |      NULL |

|    14 | Lu Wushuang   |  17 | F      |       3 |      NULL |

|    15 | Duan Yu       |  19 | M      |       4 |      NULL |

|    30 | lee           |  21 | M      |       2 |         1 |

+-------+---------------+-----+--------+---------+-----------+

假如突然DBA发现刚才的DELETE不应该执行,必需要恢复这条数据。

step0、这时候,首先,我们要关掉数据库对外访问的权限,防止有用户写入数据,干扰恢复操作。

(可以修改前端的web连接数据库的文件,将其改到其它从节点,虽然用户无法写,但最起码比网站无法访问要强些)

step1、先提取出误操作这段时间的二进制日志,取名为today.sql,如下:mysqlbinlog --start-datetime='2016-07-12 23:51:48' --stop-datetime='2016-07-12 23:53:00' \

/usr/local/mariadb/var/mysql-bin.000033 > /root/today.sql

step2、编辑这个today.sql,找到刚才的那条DELETE操作,剔除DELETE语句,保存退出。

step3、用全备份backup.sql恢复数据:mysql -e 'source backup.sql;'

恢复完的效果如下:

MariaDB [hellodb]> select * from students;

+-------+---------------+-----+--------+---------+-----------+

| StuID | Name          | Age | Gender | ClassID | TeacherID |

+-------+---------------+-----+--------+---------+-----------+

|     1 | Shi Zhongyu   |  22 | M      |       2 |         3 |

|     2 | Shi Potian    |  22 | M      |       1 |         7 |

|     3 | Xie Yanke     |  53 | M      |       2 |        16 |

|     4 | Ding Dian     |  32 | M      |       4 |         4 |

|     5 | Yu Yutong     |  26 | M      |       3 |         1 |

|     6 | Shi Qing      |  46 | M      |       5 |      NULL |

|     7 | Xi Ren        |  19 | F      |       3 |      NULL |

|     8 | Lin Daiyu     |  17 | F      |       7 |      NULL |

|     9 | Ren Yingying  |  20 | F      |       6 |      NULL |

|    10 | Yue Lingshan  |  19 | F      |       3 |      NULL |

|    11 | Yuan Chengzhi |  23 | M      |       6 |      NULL |

|    12 | Wen Qingqing  |  19 | F      |       1 |      NULL |

|    13 | Tian Boguang  |  33 | M      |       2 |      NULL |

|    14 | Lu Wushuang   |  17 | F      |       3 |      NULL |

|    15 | Duan Yu       |  19 | M      |       4 |      NULL |

+-------+---------------+-----+--------+---------+-----------+

15 rows in set (0.00 sec)

可以看到第一天数据又恢复了最原始的状态,第10条数据又恢复回来了,但是INSERT的那条数据却没有了,因此我们还要使用二进制日志继续恢复。

step4、继续用二进制日志恢复:mysql -e 'source today.sql;'

step5、查看恢复后的结果:

恢复完的效果如下:

MariaDB [hellodb]> select * from students;

+-------+---------------+-----+--------+---------+-----------+

| StuID | Name          | Age | Gender | ClassID | TeacherID |

+-------+---------------+-----+--------+---------+-----------+

|     1 | Shi Zhongyu   |  10 | M      |       2 |         3 |

|     2 | Shi Potian    |  22 | M      |       1 |         7 |

|     3 | Xie Yanke     |  53 | M      |       2 |        16 |

|     4 | Ding Dian     |  32 | M      |       4 |         4 |

|     5 | Yu Yutong     |  26 | M      |       3 |         1 |

|     6 | Shi Qing      |  46 | M      |       5 |      NULL |

|     7 | Xi Ren        |  19 | F      |       3 |      NULL |

|     8 | Lin Daiyu     |  17 | F      |       7 |      NULL |

|     9 | Ren Yingying  |  20 | F      |       6 |      NULL |

|    10 | Yue Lingshan  |  19 | F      |       3 |      NULL |

|    11 | Yuan Chengzhi |  23 | M      |       6 |      NULL |

|    12 | Wen Qingqing  |  19 | F      |       1 |      NULL |

|    13 | Tian Boguang  |  33 | M      |       2 |      NULL |

|    14 | Lu Wushuang   |  17 | F      |       3 |      NULL |

|    15 | Duan Yu       |  19 | M      |       4 |      NULL |

|    30 | lee           |  21 | M      |       2 |         1 |

+-------+---------------+-----+--------+---------+-----------+

16 rows in set (0.00 sec)

可以看到,第一条数据的Age已经改为我们要求的值了,INSERT的最后一条数据也恢复回来了, 误删除的StuID为10的数据也恢复了。

至此,我们的恢复就完成了。

mysql 日志节点恢复_基于binlog二进制日志的MySQL恢复笔记相关推荐

  1. MySQL备份方案–(利用mysqldump以及binlog二进制日志)

    MySQL备份方案-->(利用mysqldump以及binlog二进制日志) 随着数据不断增加,而且为了兼容以后的innodb存储引擎, 所以考虑采用mysqldump全备+日志增量备份的策略. ...

  2. mysql 表空间收缩_【135期】谈谈MySQL中的重做日志,回滚日志,以及二进制日志的区别及各自作用...

    点击上方"Java面试题精选",关注公众号 面试刷图,查缺补漏 >>号外:往期面试题,10篇为一个单位归置到本公众号菜单栏->面试题,有需要的欢迎翻阅 阶段汇总集 ...

  3. 【转】【MySQL】运行原理(四):重做日志(redo log),回滚日志(undo log),二进制日志(binlog)

    MySQL中有六种日志文件,分别是:重做日志(redo log).回滚日志(undo log).二进制日志(binlog).错误日志(errorlog).慢查询日志(slow query log).一 ...

  4. mysql dba系统学习(5)二进制日志binlog之一

    一,二进制日志文件的作用 Mysql的二进制日志记录的是所有mysql数据库发生变更的信息,因此对数据库非常重要,二进制日志的作用我概括了一下主要包含如下几个方面: 1.可以用于数据库基于时间点的还原 ...

  5. mysql插入二进制命令_MySQL将语句写入到binlog二进制日志中

    由于二进制日志是公共资源,所有线程都要写二进制日志,所以一定要避免两个线程同时更新二进制日志.因此,在事件组写二进制日志时,二进制日志将获得一个互斥锁LOCK_log,然后在事件组写完后释放,由于服务 ...

  6. mysql二进制日志被删除无法启动_mysql二进制日志文件出错导致mysql服务无法启动...

    今天打开phpmyadmin发现连不上mysql数据库,重启mysql启动不起来,查看日志发现如下错误 mysqld: File '.\mysql-bin.000370' not found (Err ...

  7. mysql 从库 问题_一篇文章帮你解决Mysql 中主从库不同步的问题

    写这篇文章是因为之前有一次删库操作,需要进行批量删除数据,当时没有控制好删除速度,导致产生了主从延迟,出现了一点小事故. 今天我们就来看看为什么会产生主从延迟以及主从延迟如何处理等相关问题. 坐好了, ...

  8. 给微软的日志框架写一个基于委托的日志提供者

    动手造轮子:给微软的日志框架写一个基于委托的日志提供者 Intro 微软的日志框架现在已经比较通用,有时候我们不想使用外部的日志提供者,但又希望提供一个比较简单的委托就可以实现日志记录,于是就有了后面 ...

  9. centos7时间同步_基于 Canal 和 Kafka 实现 MySQL 的 Binlog 近实时同步

    点击蓝色"架构文摘"关注我哟 加个"星标",每天上午 09:25,干货推送! 作者:Throwable    掘金:https://juejin.im/post ...

最新文章

  1. Keras方法进行词嵌入
  2. 如何在cmd命令行中查看、修改、删除与添加环境变量
  3. [JSOI2008]星球大战
  4. SQL2K数据库开发十五之表操作查看表中的数据
  5. 跑腿同学校园小程序源码-已测试
  6. mysql zerofill设置方法_在MySQL中使用ZEROFILL设置自定义自动增量
  7. intel 指令集_苹果首款ARM Mac来了,浅谈ARM和Intel处理器
  8. drools 将添加switch支持
  9. Unity3D基础6:灯光组件
  10. pku1631 Bridging signals
  11. 图片上传功能(EasyUI前台框架+SSM框架)
  12. HDU6072 Logical Chain
  13. SCU 4437 Carries(二分乱搞)题解
  14. python正则匹配中文或数字_Python匹配中文的正则表达式
  15. Esp8266闪存文件系统LIttleFS
  16. 腾讯投 10 亿在武汉建中部最大研发中心
  17. 联想笔记本睡眠模式发烫问题解决
  18. wmv文件不能快进的解决方法
  19. 希捷酷鱼12 500G的确有问题,好惨啊
  20. 歌谣学前端之箭头函数1

热门文章

  1. 安装Windows 2003 域控制器
  2. Microsoft JET Database Engine 错误 #39;80004005#39;的解决方法
  3. vivado 如何创建工程模式_基于Vivado的FPGA高性能开发研修班2019年8月30日上海举行...
  4. Maven高级之archetype(原型/骨架)开发
  5. 杨辉三角python_Python面试150题汇总,都是常问的面试题!
  6. c语言long的格式字符串,时间字符串和long类型之间的转换
  7. 再见Postman,这款API神器更好用!
  8. 多图证明,Java到底是值传递还是引用传递?
  9. Android的引用jar包
  10. 英语笔记:写作:Recreational activities