使用binlog备份恢复myqsl数据

  • 什么是binlog
  • binlog备份数据
  • binlog恢复数据
  • 读取数据
    • 读取数据
      • 方法一:使用mysqlbinlog读取binlog日志:
      • 方法二:登录服务器,并查看(推荐此种方法)
      • a)完全恢复(需要手动vim编辑mysql-bin.000009,将那条drop语句剔除掉)
      • b)指定pos结束点恢复(部分恢复):

什么是binlog

MySQL的二进制日志binlog可以说是MySQL最重要的日志,它记录了所有的DDL(create alter drop)和DML语句(除了数据查询语句select),以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的。

DDL

  • Data Definition Language 数据库定义语言
    主要的命令有CREATE、ALTER、DROP等,DDL主要是用在定义或改变表(TABLE)的结构,数据类型,表之间的链接和约束等初始化工作上,他们大多在建立表时使用。

DML

  • Data Manipulation Language 数据操纵语言

主要的命令是SELECT、UPDATE、INSERT、DELETE,就象它的名字一样,这4条命令是用来对数据库里的数据进行操作的语言

mysqlbinlog常见的选项有以下几个:

  • –start-datetime:从二进制日志中读取指定等于时间戳或者晚于本地服务器的时间
  • –stop-datetime:从二进制日志中读取指定小于时间戳或者等于本地服务器的时间 取值和上述一样
  • –start-position:从二进制日志中读取指定position 事件位置作为开始。
  • –stop-position:从二进制日志中读取指定position 事件位置作为事件截至

binlog日志包括两类文件
1)二进制日志索引文件(文件名后缀为.index)用于记录所有的二进制文件
2)二进制日志文件(文件名后缀为.00000*)记录数据库所有的DDL和DML(除了数据查询语句select)语句事件。

binlog备份数据

将anquan数据库备份到/tmp/anquan_$(date +‘%Y-%m-%d’ ).sql.gz文件中:

mysqldump -uroot -proot -B -F -x --master-data=2 anquan | gzip > /tmp/anquan_$(date +'%Y-%m-%d' ).sql.gz

参数说明:.sq
-B:指定数据库
-F:刷新日志
-R:备份存储过程等
-x:锁表
–master-data:在备份语句里添加CHANGE MASTER语句以及binlog文件及位置点信息

进入tmp目录下查看备份的数据

进入 /var/lib/mysql目录下查看,每备份一次就会产生一个mysql-bin文件

进入数据库通过show master status命令查看已覆盖最新的bin文件

binlog恢复数据

以图中数据库数据表为例

先对member表中插入一个元素
insert into member values(4,'litaibai',18,'jinyesi');
再将id2的name修改为sudongpo
update member set name='sudongpo' where id=2;

修改结果如下

假设将数据库删除了

![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dklh5aau-1658036630069)(C:\Users\17874\AppData\Roaming\Typora\typora-user-images\image-20220716135538074.png)](https://img-blog.csdnimg.cn/24337b1aea8e4c8b926b5f478456b57b.png)

先进 /var/lib/mysql/将最新一次的备份文件复制一份,在执行一次刷新日志索引操作,重新开始新的binlog日志记录文件,这个文件不会再有后续写入了,因为便于我们分析原因及查找ops节点,以后所有数据库操作都会写入到下一个日志文件。

[root@vm-002 ~]# cd /var/lib/mysql/
[root@vm-002 mysql]# cp -v mysql-bin.000009 /tmp/
'mysql-bin.000009' -> '/tmp/mysql-bin.000009'
[root@vm-002 mysql]# ls -al /tmp
mysql-bin.000009

在进入mysql中刷新一次数据

mysql > flush logs;

读取数据

读取数据

进入tmp目录下
cd /tmp
解压备份文件
gzip -d anquan_2022-07-16.sql.gz
导入备份文件
mysql -uroot -proot < anquan_2022-07-16.sql.gz

读取数据有两种方法

方法一:使用mysqlbinlog读取binlog日志:

[root@vm-002 ~]# cd /var/lib/mysql/
[root@vm-002 mysql]# mysqlbinlog mysql-bin.000009

发现只恢复到之前未更新数据的状态的,所以更详细的恢复数据推荐第二种方法。

方法二:登录服务器,并查看(推荐此种方法)

mysql> show binlog events in 'mysql-bin.000003';

通过分析,造成数据库破坏的pos点区间是介于 896–943 之间(这是按照日志区间的pos节点算的),只要恢复到896前就可。

从binlog日志恢复数据
恢复命令的语法格式:
mysqlbinlog mysql-bin.0000xx | mysql -u用户名 -p密码 数据库名

--------------------------------------------------------
常用参数选项解释:
–start-position=875 起始pos点
–stop-position=954 结束pos点
–start-datetime=“2016-9-25 22:01:08” 起始时间点
–stop-datetime=“2019-9-25 22:09:46” 结束时间点
–database=zyyshop 指定只恢复zyyshop数据库(一台主机上往往有多个数据库,只限本地log日志)
--------------------------------------------------------
不常用选项:
-u --user=name 连接到远程主机的用户名
-p --password[=name] 连接到远程主机的密码
-h --host=name 从远程主机上获取binlog日志
–read-from-remote-server 从某个MySQL服务器上读取binlog日志
--------------------------------------------------------
小结:实际是将读出的binlog日志内容,通过管道符传递给mysql命令。这些命令、文件尽量写成绝对路径;

a)完全恢复(需要手动vim编辑mysql-bin.000009,将那条drop语句剔除掉)

[root@vm-002 backup]# cp /var/lib/mysql/mysql-bin.000009 /tmp
[root@vm-002 backup]# mysqlbinlog mysql-bin.000009 > 000009.sql
[root@vm-002 backup]# vim 000009.sql #删除里面的drop语句
[root@vm-002 backup]# mysql -uroot -p -v < 000009.sql

温馨提示:
在恢复全备数据之前必须将该binlog文件移出,否则恢复过程中,会继续写入语句到binlog,最终导致增量恢复数据部分变得比较混乱!
可参考:https://www.cnblogs.com/kevingrace/p/5904800.html

发现数据找回

b)指定pos结束点恢复(部分恢复):

–stop-position=471 pos结束节点(按照事务区间算,是471)
注意:
此pos结束节点介于“member表原始数据”与更新“name=‘李四’”之前的数据,这样就可以恢复到更改插入litaibai之前的数据了。
操作如下:
[root@vm-002 ~]# mysqlbinlog --start-position=427 --stop-position=548 --database=anquan /var/lib/mysql/mysql-bin.000009 | mysql -uroot -proot -v

mysqlbinlog --start-position=621 --stop-position=734 --database=anquan /var/lib/mysql/mysql-bin.000009 | mysql -uroot -proot -v

使用binlog备份恢复myqsl数据相关推荐

  1. TiDB数据库备份恢复与数据迁移

    TiDB数据库备份恢复与数据迁移 数据迁移 使用 mydumper/loader 全量导入数据 mydumper/loader 全量导入数据最佳实践 某次导入示例,以及相关的配置 从 MySQL 导出 ...

  2. 使用MySQL的binlog日志恢复误删数据

    使用binlog日志恢复误删数据 1.查看binlog是否开启并锁表 # 进入mysql mysql -uroot -proot#查看binlog是否开启 show variables like '% ...

  3. 版本管理工具Subversion Edge的备份恢复与数据迁移方案

    软件开发生命周期中会使用到多种工具,这些工具的更迭与迁移,备份与恢复都构成了软件开发生命周期的重要部分.这篇文章以当下最新版本的Subversion Edge为例介绍一下其备份恢复与数据迁移方案,因相 ...

  4. PLSQL Developer备份恢复oracle数据

    PLSQL Developer备份恢复oracle数据 使用PL sql提供的功能可以快速的备份恢复oracle数据. 1  导出存储过程,触发器,序列等所有用户对象.(备份) 在PL/SQL Dev ...

  5. MYSQL专题-使用Binlog日志恢复MySQL数据

    大家有没有碰到过由于误操作把测试数据库的一张表给删除了,导致测试的数据都被删除了,然后手足无措,测试把你一定数落,顿时感觉自己要死了?今天就教你即使误删了也可以将删除的数据恢复,以后误删再也不用惊吓了 ...

  6. mysql binlog 备份恢复数据_Mysql结合备份+binlog恢复误删除操作数据

    结合备份+binlog恢复数据. 场景:昨天晚上做了全备,今天上午用户不小心误删除某张表. 解决方案:不建议在原生产环境直接恢复,建议在另一台机器恢复全库+日志,然后导入到生产环境. 1) 创建表se ...

  7. oracle数据备份 恢复,Oracle数据备份和恢复

    Oracle数据库的备份和恢复有很多种方法,是一个很大的话题,足可以写一本书,但是,本文只介绍采用exp和imp进行数据备份和恢复,这也是程序员最常用的方法. 本文涉及的备份与恢复的其它概念都是狭义的 ...

  8. mysql日志恢复数据_Mysql 通过binlog日志恢复数据

    Binlog日志,即binary log,是二进制日志文件,有两个作用,一个是增量备份,另一个是主从复制,即主节点维护一个binlog日志文件,从节点从binlog中同步数据,也可以通过binlog日 ...

  9. mysql binlog 备份_做好mysql运维,必须熟练掌握备份和恢复,实战一次不行多来几次...

    原文:https://www.toutiao.com/i6855460778359816715/ 平台:头条 作者:程序员不就是0和1 一. 备份恢复策略 进行备份或恢复操作时需要考虑一些因素: 1. ...

最新文章

  1. 一款标注颜色,距离的小软件 markman
  2. 当sql 没有足够的内存执行程序利用命令执行
  3. struts2自动接收表单数据
  4. hdu 5925 搜索
  5. 实验四——多分支结构及本章总结
  6. 4种方法帮你解决IntelliJ IDEA控制台中文乱码问题
  7. php注册树模式,PHP三种基本设计模式(工厂模式、单例模式、注册树模式)
  8. 德力西双电源自动转换开关说明书_今日优品:南开区FLQ3-25双电源自动转换开关全国服务-老友网...
  9. App后台开发运维和架构实践学习总结(12)——基于token的多平台身份认证架构设计
  10. [转贴]What's the Scroll Lock key on my computer for?
  11. JavaScript:递归实现深拷贝
  12. k系列服务器,Nvidia开普勒K4000、K2000、K2000D、K600四款Kepler架构Quadro显卡专业卡全新登场...
  13. mac Python安装pybloomfilter 出现找不到libcrypto的问题
  14. JAVA VM(HotSpot)
  15. Window10 开启卓越性能模式
  16. Clickhouse基础语法、数据类型、数据表引擎学习
  17. 用Python实现小黑屋游戏
  18. 写于即将23岁的前端转正前夕
  19. Dell PowerEdge R750 Intel DAOS 顺利通过“HighPerf Ready 1.0”测试
  20. 爬虫小项目之爬取赛尔号

热门文章

  1. 2022年度上半年河南省建筑工程安全文明标准化示范工地认定意见公示
  2. 56个有效且健康的减肥小绝招
  3. cdr怎么新建和删除图层
  4. AD如何输出坐标文件(超实用)
  5. 分水岭算法c语言,分水岭算法的概念及原理
  6. 人工智能是什么,机器学习就是人工智能吗?
  7. Java 无需解压直接读取ZIP压缩包里的文件及内容
  8. 分享66个ASP上传下载源码,总有一款适合您
  9. w13scan 扫描器的安装及应用
  10. “全包”给装修公司,验收时发现甲醛超标,能要求重装或赔偿吗?