在工作中,我们误删数据或者数据库,我们一定需要跑路吗?我看未必,程序员一定要学会自救,神不知鬼不觉的将数据找回。

在 mysql 数据库中,我们知道 binlog 日志记录了我们对数据库的所有操作,所以 binlog 日志就是我们自救的利器。

接下来就来开启程序员自救之路。

想要自救成功,binlog 这把利器一定要好,在自己之前,我们一定要确定我们有 binlog 这把利器,以下就是确保有 binlog 利器的操作。

1、确认数据库是否开启 binlog 日志

show variables like 'log_%';

查看红色圈出来的地方,如果为 ON 则表示开启,否则未开启。没有开启的话,就需要做以下操作。

2、开启 binlog 日志

如果未开启 binlog 日志的话,就需要开启 binlog 日志,在 MySQL 的配置文件中设置,如果你的是windowns 电脑则找到 my.ini 文件,unix 系统找到 my.cnf文件。在文件中修改或者配置如下参数:

# Binary Logging.
#日志文件的名字及存储路径
log-bin=D:Mysql-binlogmysql-bin
#设置日志格式
binlog-format=mixed

其中 binlog-format 有三种选项:

STATMENT:每一条会修改数据的 SQL 语句会记录在 binlog 中。

ROW:不记录每一条 SQL语句的上下文信息,仅记录哪条记录被修改。

MIXED:以上两种模式的混合使用,一般的复制使用STATEMENT模式保存binlog,对于STATEMENT模式无法复制的操作使用ROW模式保存binlog,MySQL会根据执行的 SQL 语句选择日志保存方式。

3、重启 MySQL 服务器

4、再次确认 binlog 日志开启成功。

好了,操作完上面几步之后,我们就可以学习如何自救了,我们使用三个场景来分别演示误删数据、误删表、误删库的情况下如何自救。

在进入具体的场景前,我们先来准备演示需要的数据库、表和数据。

1、创建数据库pingtouge

create database pingtouge;

2、创建 student 表

create table student(
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
num VARCHAR(40) NOT NULL,
PRIMARY KEY (id )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

3、插入数据

insert into student(name,num)values('张三','1234');
insert into student(name,num)values('李四','1235');

有了数据之后,可以正式进入场景了, are you ready?

场景一:误删了某条数据

一不小心将 student 表中 id=1 的数据删除了。该怎么办?

凭着记忆手动插入这条数据吗?好像也不是不可以哇,能记住的都是天才,利用 binlog 日志才是王道。

使用 show master status命令,查看最新的 binlog 日志文件

获取到最新的 binlog 日志文件后,使用 show binlog events in 'mysql-bin.000043';命令查看 binlog 日志文件,如下图所示:

binlog 日志记录了我们对数据库的所有操作,包括语句提交前和提交后的偏移量,在数据恢复时会使用到这两个偏移量。

在正式进入数据恢复之前,我们先来认识 MySQL 提供的一个工具:mysqlbinlog 。mysqlbinlog 是用来操作 binlog 日志文件,我们数据恢复就需要使用到它。

使用 mysqlbinlog 来恢复二进制日志文件,命令格式为:

mysqlbinlog binlog日志文件 --start-position 初始偏移量的位置 --stop-position 结束偏移量的位置 | mysql -u root -p 数据库名称;

我们在 binlog 日志文件中找到 student 表中 id=1 这条数据在删除之前的最后一次操作的起始偏移量和结束偏移量,在上图中,我已经标出,起始偏移量为:710,结束偏移量为:996。有了这两个参数之后,我们就可以使用 mysqlbinlog 命令来恢复数据了。

执行:

mysqlbinlog d:Mysql-binlogmysql-bin.000043 --start-position 710 --stop-position 996 | mysql -u root -p pingtouge;

如果命令执行成功的话,再次执行 select * from student命令,查看数据是否恢复。

从上图中,可以看出,我们成功的恢复了 student 表中 id=1 的这条数据。

场景二:误删了数据表

又是一不小心把表 student 给删除了。

对于误删表,同样可以使用 binlog 日志来恢复,毕竟 binlog 日记记录的是我们对 MySQL 的所有操作,跟恢复单条数据一样,我们同样需要在 binlog 日志文件中查找到起始偏移量和结束偏移量,用来恢复数据。

与单条数据不一样的是,对于表的偏移量,起始偏移量是创建表之前的开始偏移量,结束偏移量是删除数据库之前的最后一个结束偏移量。 如下图示:

一张图截不全,我就分两张图了。同样我们使用 mysqlbinlog 来恢复 student 表,执行:

mysqlbinlog d:Mysql-binlogmysql-bin.000043 --start-position 393 --stop-position 1997 | mysql -u root -p pingtouge

命令执行完成后,再次执行 select * from student;,你会发现我们的数据都回来了。

场景三:误删了数据库

你在工作中受气了,准备删库跑路啦,于是你就把pingtouge数据库给删除了,删完之后你就后悔了,怎么办?在线等。

不要慌,万能的 binlog 日志可以救你,跟前面两种场景一样,还是在 binlog 日志中查询到需要恢复数据库的起始偏移量和结束偏移量。这里我就不截图了。

通过查看 binlog 日志发现创建数据库pingtouge的开始偏移量为 219,删库之前的最后偏移量为 3861,有了这两个偏移量之后,执行:

mysqlbinlog d:Mysql-binlogmysql-bin.000043 --start-position 219 --stop-position 3861 | mysql -u root -p

需要注意的是最后不需要带上数据库,执行完之后,发现与数据库pingtouge相关的数据全部都回来了。

删库了,我们不一定需要跑路,一定要学习自救,少年。

最后,小编想说:我是一名python开发工程师,

整理了一套最新的python系统学习教程,

想要这些资料的可以关注私信小编“01”即可(免费分享哦)希望能对你有所帮助

原文链接:https://blog.csdn.net/z694644032/article/details/104463920

fox pro删除单条数据_删库之后不要着急跑路,教你神不知鬼不觉找回数据相关推荐

  1. 删库后,除了跑路还能怎么办?

    阅读本文大概需要 1.4 分钟. 当年悟空学艺于菩提祖师门下,老师遣他下山,悟空觉得自己蒙受师傅传授大恩,还没有报答.菩提祖师就说:不要提什么报答之恩,只要你日后闯出祸来不把为师说出来就行了. 我听说 ...

  2. linux mysql恢复数据_删库不跑路详解MySQL数据恢复

    作者:程淇铭 出处:https://segmentfault.com/a/1190000020116271 日常工作中,总会有因手抖.写错条件.写错表名.错连生产库造成的误删库表和数据的事情发生,那么 ...

  3. 删库了,除了跑路还能怎么办?在线等!

    作者 | 林晓斌 编辑 | 小智 程序员小智刚刚犯了每个程序员都可能犯的错:误删库.他很热爱这份工作,但在网上搜索一圈解决办法,最后出来的结果都是:祭天.跑路等关键词.他想知道有没有什么补救方法,在线 ...

  4. 删库别急着跑路,这几步神恢复!

    日常工作中,总会有因手抖.写错条件.写错表名.错连生产库造成的误删库表和数据的事情发生,那么,如果连数据都恢复不了,还要什么 DBA. 1.前言 数据恢复的前提的做好备份,且开启 binlog, 格式 ...

  5. 在没学会用MySQL之前,我还是那个担心删库了就只能跑路的懵懂少年

    我们常常听人说,只要你愿意,MySQL 可以恢复至半个月甚至一个月以内的任何一个状态.网上也有很多删库跑路的段子... 那么今天松哥想和大家来聊一聊 MySQL 中的 binlog,来手把手教大家如何 ...

  6. 我删删删删库了,要跑路吗?

    每日英语,每天进步一点点(偷笑): 前言 写个简单的 Bash 脚本都不上心了,写完连检查都不检查,直接拖到到实体服务器跑. 结果一跑起来,发生不对劲,怎么一个简单脚本跑了 10  秒还没结束,于是立 ...

  7. 写了Bug,误执行 rm -fr /*,我删删删删库了,要跑路吗?| 原力计划

    作者 | 小林coding 责编 | 伍杏玲 出品 | CSDN博客 小林在五一节前,想到有 5 天假期,心里开始飘了. 写个简单的 Bash 脚本都不上心了,写完连检查都不检查,直接拖到实体服务器跑 ...

  8. 写了Bug,误执行 rm -fr /*,我删删删删库了,要跑路吗?

    每日英语,每天进步一点点(偷笑): 前言 临近五一节,想到有 5 天假期,小林开始飘了. 写个简单的 Bash 脚本都不上心了,写完连检查都不检查,直接拖到到实体服务器跑. 结果一跑起来,发生不对劲, ...

  9. fox pro删除单条数据_Mac文件夹数据同步工具——Sync Folders Pro

    Mac版同步文件夹Pro(文件夹数据同步工具)分享给大家!Mac版同步文件夹Pro是一种功能强大的文件夹数据同步工具,可帮助您同步两一个文件夹的内容,包括任何子文件夹.使用文件夹同步软件,允许您在任一 ...

最新文章

  1. JAVA语言教学重点_《JAVA语言》教学大纲
  2. 单词翻转(信息学奥赛一本通-T1144)
  3. 初探 RabbitMQ 消息队列
  4. 系统集成资质培训 - 论文:论项目的人力资源管理
  5. VC预定义常量WIN32、_WIN32、_WIN64分析(转载)
  6. IOS之UI--自定义按钮实现代理监听点击事件
  7. 信号与系统_严国志_第一章_绪论
  8. 客快物流大数据项目(三):项目解决方案
  9. 系统项目验收测试报告怎么做?2020最新测试报告模板
  10. 2022 年面试工具篇 Jmeter 接口面试题及答案
  11. Linux网络编程-UDP实现QQ聊天功能
  12. 为什么国外程序员的创造力比中国程序员强?
  13. 数据挖掘 顶级期刊_人工智能领域的顶级学术期刊大全(一)
  14. 误人子弟的网络,谈谈HTTP协议中的短轮询、长轮询、长连接和短连接
  15. 微信小程序-如何实现图片授权保存本地?【亲测有效,附完整源码】
  16. 学术-物理-维空间:二维空间
  17. 如何做英文SEO、如何做英文外链
  18. 疯狂Java讲义(十三)----第五部分
  19. 2.3 数值分析: 矩阵三角分解法
  20. 【基础篇】各类语言的变量命名规则

热门文章

  1. 20162311 算法复杂度-3
  2. PGA_AGGREGATE_TARGET 原理
  3. Linux统计某文件夹下文件、文件夹的个数
  4. 1874畅通工程续(dijkstra算法)
  5. [转]Oracle DB 复制数据库
  6. sdcms的一个bug,总是提示,该文件不允许被上传
  7. eclipse的菜单栏消失问题解决
  8. 分布式事物解决方案-TCC
  9. Entrust - Laravel 用户权限系统解决方案
  10. nginx产生【413 request entity too large】错误的原因与解决方法