先讲个事,前段时间,系统长时间不用的一个功能被开放出来了,想当然的我没有在测试平台上测试,直接操作了正式系统(的确是我不严谨),导致好多数据异常,页面展示错乱了。于是我想到的第一个就是进行备份还原。项目进行了7天的备份,每天凌晨自动备份,但是凌晨到现在的数据就会丢失了,这可是重大问题啊。我顿时慌了,于是只能寻求DBA的帮助。这边省略五百字。。。

最后问题解决了,让我对数据恢复产生了兴趣,听DBA讲用的方法是Flashback闪回工具,也简单,于是我也自学了一下,这边做个介绍。

flashback可以把数据库恢复到以前某个时间点(或者说某个binlog的某个pos)。比如忘了带where条件的update、delete操作,传统的恢复方式是利用全备+二进制日志前滚进行恢复,相比于传统的全备+增备,flashback显然更为快速、简单。这里有个注意点,DDL语句是不支持进行flashback的,谨慎操作。

先讲讲所谓的闪回是什么意思,了解他的原理是什么。

其实很简单,相当于回滚,MySQL的binlog以event的形式,记录了MySQL中所有的变更情况,利用binlog我们就能够重现所记录的所有操作。flashback工具(-B 参数)可对rows格式的binlog可以进行逆向操作,将已执行的delete语句反向生成insert语句,将update语句生成反向update语句,将insert语句反向生成delete语句。这里提一句,binlog是有三种格式的:

statement,基于SQL语句的模式,一般来说生成的binlog尺寸较小,但是某些不确定性SQL语句或函数在复制过程可能导致数据不一致甚至出错;

row,基于数据行的模式,记录的是数据行的完整变化。相对更安全,推荐使用(但通常生成的binlog会比其他两种模式大很多);

mixed,混合模式,可以根据情况自动选用statement抑或row模式;这个模式下也可能造成主从数据不一致。它属于MySQL 5.1版本时期的过渡方案,已不推荐使用了。

注意:使用mysqlbinlog flashback 工具必须设置:binlog_format = row。如果误操作的事务是由多个event组成的,那么必须将整个事务倒序恢复,即从最后一个event恢复到第一个event。

使用方法:

第一步:安装flashback

MySQL本身是不自带flashback的,我们需要进行自己安装。下载地址:https://pan.baidu.com/s/1U33OO79RjBMJPSi0dDpKdg

将mysqlbinlog文件移至mysql安装路径的bin目录下,执行mysqlbinlog --help(自行解决报错),无任何报错后再执行mysqlbinlog -V,看是否mysql是否版本发生了变化,且多了一个 -B 参数,这样就装完了。

第二步:测试效果

随便建一张表,比如叫frame_ou

create table frame_ou(

ouguid  varchar(50) not null,

ouname varchar(20),

oulevel  int(5)

)

我们往里面插入一条数据,insert into frame_ou values('111','组织部',1);

看下binlog里面,可以看到这句插入语句mysqlbinlog -vv mysql-bin.000004

1 ### INSERT INTO`test`.`frame_ou`2 ### SET

3 ### @ouguid=111 /*VARSTRING(50) meta=50 nullable=0 is_null=0*/

4 ### @ouname='组织部' /*VARSTRING(50) meta=20 nullable=1 is_null=0*/

5 ### @oulevel=1 /*SHORTINT meta=0 nullable=1 is_null=0*/

然后执行下flashback   mysqlbinlog -vv mysql-bin.000004 -B,然后就会发现

### DELETE FROM`test`.`frame_ou`

###WHERE###@ouguid=111 /*VARSTRING(50) meta=50 nullable=0 is_null=0*/

### @ouname='组织部' /*VARSTRING(50) meta=20 nullable=1 is_null=0*/###@oulevel=1 /*SHORTINT meta=0 nullable=1 is_null=0*/

同理,delete操作将会被转换为insert,update被转换为反向的update;若在一个事务中既有insert、update、delete语句,通过使用-B参数后,不仅三种DML语句完成了逆向转换,并且语句顺序也会发生颠倒。

在binlog中找到误操作的pos变化区间后,使用mysqlbinlog -B 恢复:

# mysqlbinlog -B --start-position=431 --stop-position=509 mysql-bin.000004 | mysql -uroot -p

注意事项:

1)        binlog_format=row

2)        只支持insert、update、delete

3)        不支持drop 、truncate、alter等DDL语句

mysql数据库补救措施_关于MySql数据库误操作数据找回的办法相关推荐

  1. MySQL学习笔记_关于MySQL的字符类型VARCHAR长度知识总结

    MySQL学习笔记_关于MySQL的字符类型VARCHAR长度知识总结 一.VARCHAR存储和行长度限制 1.VARCHAR(N)中,N指的是字符的长度,VARCHAR类型最大支持65535,指的是 ...

  2. 数据库mysql建立索引_为mysql数据库建立索引

    前些时候,一位颇高级的程序员居然问我什么叫做索引,令我感到十分的惊奇,我想这绝不会是沧海一粟,因为有成千上万的开发者(可能大部分是使用MySQL的)都没有受过有关数据库的正规培训,尽管他们都为客户做过 ...

  3. mysql 增量备份_云计算-开源数据库-备份

    关于备份: 备份原因:怕丢,怕被误删. 备份目标:数据的一致性,服务的可用性. 备份技术:物理备份/冷备份 直接复制数据库文件,适用于大型数据库环境,不受存储引擎的限制,但不能恢复到不同的MySQL版 ...

  4. mysql主从数据库含义_(转)Mysql数据库主从心得整理

    管理mysql主从有2年多了,管理过200多组mysql主从,几乎涉及到各个版本的主从,本博文属于总结性的,有一部分是摘自网络,大部分是根据自己管理的心得和经验所写,整理了一下,分享给各位同行,希望对 ...

  5. mysql 存储过程 排序_更改MySQL存储过程“数据库排序规则”的名称

    我已将数据库从本地计算机导入到服务器计算机.导入数据库时​​,系统默认将数据库的字符集值设置为"拉丁".我已将数据库的字符集更改为" utf8".但是,数据库排 ...

  6. mysql语句导出数据库文件_通过Mysql命令行语句来导入、导出数据库文件

    Mysql命令行导出数据库: 1.首先我们通过命令行进入到mysql安装目录的bin目录下,比如我输入的命令行为: cd C:\Program Files\MySQL\MySQL Server 5.5 ...

  7. 怎么在linux下用mysql建库_在MySQL/MariaDB中创建数据库、数据库用户和授予特权(针对Linux平台)...

    在本文中,将学习MySQL/MariaDB数据库创建.数据库用户创建以及如何向用户授予权限,方法针对Linux平台.安装数据库请参考为CentOS 8操作系统安装MySQL的方法,以安装MySQL 8 ...

  8. 查看mysql数据库历史_查看mysql数据库历史

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  9. Rds基于mysql开发的_开发云数据库RDS MYSQL版讲解

    前言 这篇文章适合所有的 C# 开发新手.老鸟以及想准备学习开发 C# 的程序猿..NET Core是一个开源通用的开发框架,支持跨平台, 阿里云函数计算推出了 dotnetcore2.1 runti ...

最新文章

  1. gradle项目 避免每次下载gradle文件/解决依赖下载慢的问题
  2. 浅析epoll – epoll例子以及分析 - C++爱好者博客
  3. 面试官:Redis 内存数据满了,会宕机吗?
  4. 使用Cloud SQL的Google App Engine全文搜索
  5. LFDMM源码剖析(融入词向量的概率图模型)
  6. rem适配的浏览器_移动端网页布局适配rem方案小结
  7. shiro认证授权过程
  8. css 横线_web前端入门到实战:CSS 搞怪的 text-decoration
  9. 算法应用三:【图像分割】+【边缘检测】canny边缘检测--冈萨雷斯--《数字图像处理》
  10. 从源码分析常见的基于Array的数据结构动态扩容机制
  11. 计算机找不到ac97前面板怎么办,Win7前面板没有声音的解决方法(声卡设置+前面板插线)...
  12. 怎样配置外汇ea服务器运行,外汇EA安装及使用超详细说明-EA邦
  13. 手机管理应用研究【5】——应用杂篇
  14. php 导出excel 进度条显示
  15. 【机器学习基础】贝叶斯神经网络
  16. 【NOI2015 Day1】软件包管理器
  17. 美通企业日报 | 中国最佳创新公司50名榜单发布;柯锐世全新亚洲总部在上海启用...
  18. 一群科学家们坐在一起,认认真真讨论如何治理人工智能了
  19. kubernets(四)创建高可用集群
  20. Linux能ping通IP,ping不通域名

热门文章

  1. python计算生态规模_Python计算生态的构建
  2. java char占用多少字节_Java虚拟机:Java对象大小、对象内存布局及锁状态变化
  3. webstorm 不识别.config文件_用TypeScript开发手势库 - (2)tsconfigamp; rollup.configamp;npx...
  4. c语言中结构体头文件是什么,函数形参里有结构体指针,为什么在头文件生
  5. mysql是bsd协议吗_freebsd下实现mysql的自动备份
  6. 另存为里面没有jpg_CAD图不会转JPG?教你两个方法,从此CAD格式转换不再烦恼
  7. 7a系列mrcc xilinx_artix-7A200T的输入时钟(50M)管脚接到MRCC的N端了,怎么解决?
  8. 快速交付 敏捷开发的特点_敏捷开发的那些事
  9. 能帮你快速设计好APP的UI kits套装
  10. %12d在c语言中的意思,《C语言程序设计》习题.doc