Mysql如何通过binlog日志恢复数据详解
IT行业相对于一般传统行业,发展更新速度更快,一旦停止了学习,很快就会被行业所淘汰。所以我们需要踏踏实实的不断学习,精进自己的技术,尤其是初学者。今天golang学习网给大家整理了《Mysql如何通过binlog日志恢复数据详解》,聊聊恢复、MySQLBinlog,我们一起来看看吧!
定期备份固然可以在服务器发生宕机的时候快速的恢复数据,但传统的全量备份不可能做到实时,所以在发生宕机的时候,也会损伤一部分数据,如果这个时候开启了binlog日志,那么可以通过binlog来对没有做备份的这一阶段损失的数据进行恢复
Binlog日志,即binary log,是二进制日志文件,有两个作用,一个是增量备份,另一个是主从复制,即主节点维护一个binlog日志文件,从节点从binlog中同步数据,也可以通过binlog日志来恢复数据
方法如下
1,登录mysql查看binlog日志的状态,输入show variables like ‘%log_bin%’;查看binlog为off关闭状态
2,开启mysql binlog日志,进入mysql配置文件(vi /etc/my.cnf) 在mysqld区域内添加如下内容,①server-id = 1(单个节点id) ②log-bin= /var/lib/mysql/mysql-bin(位置一般和mysql库文件所在位置一样) ③expire_logs_days = 10(表示此日志保存时间为10天),重启mysqld,再次查看binlog日志开启状态为ON

3,Binlog日志包括两类文件;第一个是二进制索引文件(后缀名为.index),第二个为日志文件(后缀名为.00000*),记录数据库所有的DDL和DML(除了查询语句select)语句事件
4,查看所有binlog日志文件列表:show master logs;

5,查看最后一个binlog日志的编号名称及其最后一个操作事件pos结束点的值:show master status;

6,Flush logs 刷新日志,此刻开始产生一个新编号的binlog文件,例如:

每当mysqld服务重启时,会自动执行刷新binlog日志命令,mysqldump备份数据时加-F选项也会刷新binlog日志
7,清空所有binlog日志命令:reset master;
8,查看binlog文件内容,使用查看工具mysqlbinlog来查看(cat/vi/more都是无法打开的)

9,上面的方法读取内容较多不易观察,以下命令更为方便查看命令:show binlog events in ‘mysql-bin.000003’;

10,指定查询,从pos点406开始查询,如下:

11,指定查询,从pos点154开始查询,中间跳过2行,查询4条数据,如图:

12,利用binlog日志恢复mysql数据,例如,现有一张数据表如图:此表位于hello数据库

现在将此数据库备份到本地(模拟每周的备份情况),备份命令如下

可以在数据备份之前或者之后执行flush logs重新生成一个binlog日志用来记录备份之后的所有增删改操作(重新生成日志更好找pos点),由于业务需求,现在对表进行插入

数据,修改数据,如图新增了两条数据id 为5和6,修改后数据如图,

6的年龄修改成了30
13,由于操作失误,误删除了数据库,所有数据都不见了,此时可以通过binlog日志恢复数据,由于之前有做了数据库备份,所以可以先将备份的数据导入进去,剩下缺少的就是备份之后操作所产生的内容(备份之后执行了插入内容以及更改内容),先恢复备份的数据:创建库hello并选择库(use hello),通过命令source /root/hello.sql将数据库内容导入,然后执行

14,恢复的内容如下所示:

15,上面恢复的数据只是截止到备份时间的数据,剩下缺少的数据可以通过binlog日志来恢复,由于我们备份数据库之前重新创建了mysql-bin.000006日志,所以备份后的所有操作都保存在这个日志中,可以先备份下这个日志文件,cp mysql-bin.000006 /root/ 接着执行flush logs 刷新日志,重新创建了一个binlog日志7

16,重新创建一个日志7的目的:接下来所有操作的数据都会写入到日志7中,日志6中不会在写入任何数据(方便根据日志6的内容恢复数据,因为日志6的数据就是备份之后到删库之前的所有操作日志,重建日志7不会有过多的数据影响恢复)
17,登录mysql 查看日志6: show binlog events in ‘mysql-bin.000006’;结果如下:

查看日志发现,在备份数据后首先执行的是插入数据操作(在一个事务内),此时可以通过指定pos结束点恢复(部分恢复),如图,pos结束点位435(事务已提交表示结束),执行命令如下, /usr/bin/mysqlbinlog --stop-position=435 --database=hello /var/lib/mysql/mysql-bin.000006 | /usr/bin/mysql -uroot -p密码 -v hello (其中整个命令的含义是通过mysqlbinlog读取日志内容并通过管道传给mysql命令,-v表示执行此mysql命令)执行后查询表发现如下:

备份之后插入的数据都出现了,目前还差一次修改的数据没有找回来,接着看日志6如图,

发现执行更新操作的事务区间为573到718,所以可以执行以下命令来恢复这段数据,/usr/bin/mysqlbinlog --start-position=573 --stop-position=718 --database=hello /var/lib/mysql/mysql-bin.000006 | /usr/bin/mysql -uroot -p密码 -v hello注意其中的符号都是英文状态下(只恢复这段事务区间的数据也就是更新的数据),恢复结果如下:

更改的数据回来了,也可以最开始的时候直接通过最终的pos结束点718来恢复
18,还有一种通过时间来恢复,还是先备份当前数据库(备份之前先flush logs创建一个新的binlog日志文件9),然后修改数据插入数据后如图,

修改后将当前数据库删除,(删除库之后再执行一下flush logs创建一个新的日志文件,这样新的操作都写入到这个文件中,上个日志文件只用来恢复数据,不会有其余数据混入)现在我们通过时间点来恢复从备份数据后到删除数据库这期间所有操作的数据,首先通过mysqlbinlog来了查看日志文件9如图所示,

19,执行命令:/usr/bin/mysqlbinlog --start-datetime="2018-04-27 20:57:55" --stop-datetime="2018-04-27 20:58:18" --database=hello /var/lib/mysql/mysql-bin.000009 | /usr/bin/mysql -uroot -p8856769abcd -v hello 更改的数据得到了恢复

20,插入数据的日志时间如图:

执行命令/usr/bin/mysqlbinlog --start-datetime="2018-04-27 20:58:18" --stop-datetime="2018-04-27 20:58:35" --database=hello /var/lib/mysql/mysql-bin.000009 | /usr/bin/mysql -uroot -p8856769abcd -v hello 插入的数据得到了恢复,如图,

总结
好了,本文到此结束,带大家了解了《Mysql如何通过binlog日志恢复数据详解》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多数据库知识!
MySQL通透详解架构设计
- 上一篇
- MySQL通透详解架构设计
- 下一篇
- mysql5.7.25使用全文检索功能的实例教程
-
- 数据库 · MySQL | 1天前 |
- MySQL数值函数大全及使用技巧
- 117浏览 收藏
-
- 数据库 · MySQL | 2天前 |
- 三种登录MySQL方法详解
- 411浏览 收藏
-
- 数据库 · MySQL | 3天前 |
- MySQL数据备份方法与工具推荐
- 420浏览 收藏
-
- 数据库 · MySQL | 3天前 |
- MySQL数据备份方法与工具推荐
- 264浏览 收藏
-
- 数据库 · MySQL | 4天前 |
- MySQL索引的作用是什么?
- 266浏览 收藏
-
- 数据库 · MySQL | 5天前 |
- MySQL排序原理与实战应用
- 392浏览 收藏
-
- 数据库 · MySQL | 1星期前 |
- MySQLwhere条件查询技巧
- 333浏览 收藏
-
- 数据库 · MySQL | 1星期前 |
- MySQL常用数据类型有哪些?怎么选更合适?
- 234浏览 收藏
-
- 数据库 · MySQL | 1星期前 |
- MySQL常用命令大全管理员必学30条
- 448浏览 收藏
-
- 数据库 · MySQL | 1星期前 |
- MySQL高效批量插入数据方法大全
- 416浏览 收藏
-
- 数据库 · MySQL | 1星期前 |
- MySQL性能优化技巧大全
- 225浏览 收藏
-
- 数据库 · MySQL | 1星期前 |
- MySQL数据备份4种方法保障安全
- 145浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- ChatExcel酷表
- ChatExcel酷表是由北京大学团队打造的Excel聊天机器人,用自然语言操控表格,简化数据处理,告别繁琐操作,提升工作效率!适用于学生、上班族及政府人员。
- 3167次使用
-
- Any绘本
- 探索Any绘本(anypicturebook.com/zh),一款开源免费的AI绘本创作工具,基于Google Gemini与Flux AI模型,让您轻松创作个性化绘本。适用于家庭、教育、创作等多种场景,零门槛,高自由度,技术透明,本地可控。
- 3380次使用
-
- 可赞AI
- 可赞AI,AI驱动的办公可视化智能工具,助您轻松实现文本与可视化元素高效转化。无论是智能文档生成、多格式文本解析,还是一键生成专业图表、脑图、知识卡片,可赞AI都能让信息处理更清晰高效。覆盖数据汇报、会议纪要、内容营销等全场景,大幅提升办公效率,降低专业门槛,是您提升工作效率的得力助手。
- 3409次使用
-
- 星月写作
- 星月写作是国内首款聚焦中文网络小说创作的AI辅助工具,解决网文作者从构思到变现的全流程痛点。AI扫榜、专属模板、全链路适配,助力新人快速上手,资深作者效率倍增。
- 4513次使用
-
- MagicLight
- MagicLight.ai是全球首款叙事驱动型AI动画视频创作平台,专注于解决从故事想法到完整动画的全流程痛点。它通过自研AI模型,保障角色、风格、场景高度一致性,让零动画经验者也能高效产出专业级叙事内容。广泛适用于独立创作者、动画工作室、教育机构及企业营销,助您轻松实现创意落地与商业化。
- 3789次使用
-
- mysql 中的备份恢复,分区分表,主从复制,读写分离
- 2023-02-23 402浏览
-
- MySQL命令行方式进行数据备份与恢复
- 2023-01-07 416浏览
-
- 一文详解MySQL Binlog日志与主从复制
- 2022-12-29 436浏览
-
- MySQL通过binlog恢复数据
- 2023-02-16 110浏览
-
- MySQL的binlog日志使用详解
- 2022-12-31 159浏览

