在前面,我们了解了mysql binlog日志的作用以及使用方法:  http://www.php20.cn/article/237

在后面讲到了,可以通过binlog进行恢复数据,那么,具体步骤是怎么样的呢?

数据库备份

数据库恢复的先决条件是,定时备份数据库,缩小binlog恢复范围.首先我们备份测试数据库数据:

1
mysqldump -uroot -p --database test > testBackSql.sql

假定它为最后一次备份数据.

test数据库,test数据表最后一个id为164

新增测试数据

通过mysql存储过程,写入测试新的测试数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
BEGIN
DECLARE num INT;
SET num=1;
WHILE 1 DO
    INSERT INTO `test`(`name`, `age`, `sex`)
VALUES
    (
        CONCAT('name:', num),
        FLOOR(1 +(RAND() * 40)),
        1
    );
SET num = num + 1;
SELECT SLEEP(0.01);
 
END WHILE;
 
END

插入一段时间后,直接删除整个数据库,最后id为367 :

数据恢复

在上面的操作中,我们备份了数据为164 id之前的所有数据,插入数据到了367之后被删库.假设我们并不知道id到了367.开始使用binlog分析日志:

首先使用 flush logs; 命令刷新二进制日志

1
flush logs;

刷新二进制的目的为:确保在刷新日志之前的binlog都为正常数据操作(程序正常更改).

刷新后,新的binlog用于做恢复数据时的记录,

因为当执行备份文件恢复数据和binlog恢复时,都会产生新的binlog,不要和原来的数据进行冲突.

获取binlog日志列表

1
2
3
4
5
6
7
8
9
10
mysql> show master logs;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000001 |     77183 |
| mysql-bin.000002 |       120 |
+------------------+-----------+
rows in set (0.00 sec)
 
mysql>

分析各个日志区间

查询000001日志

1
 /www/server/mysql/bin/mysqlbinlog /www/server/data/mysql-bin.000001  |more

查询000002日志

1
 /www/server/mysql/bin/mysqlbinlog /www/server/data/mysql-bin.000002  |more

很明显,000002没有删库的那条记录,那么代表备份到删库这段时间的binlog日志都存在000001

通过此开始时间,可以判断出,000001  binlog记录了备份后的所有数据.(如果涉及多个binlog,需要执行多个binlog恢复日志)

通过查询binlog,获取到最后恢复点:

1
 /www/server/mysql/bin/mysqlbinlog /www/server/data/mysql-bin.000001  |tail -50

将原有备份数据恢复:

1
 cat testBackSql.sql |mysql -uroot -p

备份数据已经恢复了,开始恢复二进制数据.

1
/www/server/mysql/bin/mysqlbinlog --stop-position=77066 /www/server/data/mysql-bin.000001| mysql -uroot -p

mysql数据恢复成功.

其他

由于时间限制,关于恢复数据中,需要获取到初始恢复位置(也就是备份数据之后的那个位置,可通过--start-datetime=datetime 参数进行定位)

然后通过--start-position=N 参数进行设置初始恢复点,进行正确的数据恢复

本文为仙士可原创文章,转载无需和我联系,但请注明来自仙士可博客www.php20.cn

mysql binlog恢复数据实战的更多相关文章

  1. MySql binlog恢复数据

    1. 直接导入数据库 mysqlbinlog --database=testdb mysql-bin. | mysql -uroot -f 2. 导出成SQL文 (1) 从binlog输出为SQL m ...

  2. MySQL 5.7 - 通过 BINLOG 恢复数据

    日常开发,运维中,经常会出现误删数据的情况.误删数据的类型大致可分为以下几类: 使用 delete 误删行 使用 drop table 或 truncate table 误删表 使用 drop dat ...

  3. Mysql binlog备份数据及恢复数据,学会这个,我在也不怕删库跑路啦~

    导读 我一直都主张,技多不压身(没有学不会的技术,只有不学习的人),多学一项技能,未来就少求人一次.网上经常听到xxx删库跑路,万一真的遇到了,相信通过今天的学习,也能将数据再恢复回来~~~ 当然啦, ...

  4. 不小心删除数据--利用MySQL的binlog恢复数据

    MySQL Binary Log也就是常说的bin-log, ,是mysql执行改动产生的二进制日志文件,其主要作用有两个: * 数据回复 * 主从数据库.用于slave端执行增删改,保持与maste ...

  5. Mysql使用binlog恢复数据解决误操作问题的两种方法

    为保证没有其他参数配置影响,重新安装配置了一台最小化安装的CentOS7虚拟机 1. 基础知识
 安装mysql5.6数据库Mysql binlog初步理解 2. 配置mysql 开启binlog.修 ...

  6. 利用mysql的binlog恢复数据

    MySQL Binary Log也就是常说的bin-log, ,是mysql执行改动产生的二进制日志文件,其主要作用有两个: * 数据回复 * 主从数据库.用于slave端执行增删改,保持与maste ...

  7. mysql利用binlog恢复数据详细例子

    模拟数据恢复的案例 有些时候脑瓜就会短路,难免会出错 场景:在生产环境中,我们搭建了mysql主从,备份操作都是在从备份数据库上 前提:有最近一天或者最近的全备 或者最近一天相关数据库的备份 最重要的 ...

  8. mysql利用binlog恢复数据

    需求:需要给开发提供一个2018年9月30号的数据,按照我们公司正常备份策略来说,直接找到对应时间的备份数据,解压导入即可,恰好这个时间节点的数据没有,只备份到2018年9月25号的,糟糕了吧 咋办呢 ...

  9. MySQL 二进制文件恢复数据基础版本

    先来一段 自行体会 #---------------------------------------------------------------------------------- #模拟通过b ...

随机推荐

  1. Day029 JDK8中新日期和时间API (二)

    # JDK8中新日期和时间API (二) Instant介绍 Instant:时间线上的一个瞬时点. 这可能被用来记录应用程序中的事件时间 戳. 在处理时间和日期的时候,我们通常会想到年,月,日,时, ...

  2. 拉仇恨!webhook + 企业微信给同事做了个代码提交监听工具

    本文案例收录在 https://github.com/chengxy-nds/Springboot-Notebook 大家好,我是小富~ 最近接个任务,用webhook做了个代码提交监听功能,就是有人 ...

  3. VMware Tanzu Kubernetes Grid 1.3 发布 - VMware 构建、签名和支持的开源 Kubernetes 容器编排平台的完整分发版

    Tanzu Kubernetes 集群是由 VMware 构建.签名和支持的开源 Kubernetes 容器编排平台的完整分发版.可以通过使用 Tanzu Kubernetes Grid 服务在主管集 ...

  4. 七、.net core(.NET 6)使用Serilog进行配置和实现日志记录

    使用Serilog来实现日志记录 先安装Serilog六件套神装包: 也可以对个别相应的包进行删除等,都是可以的.例如,标注的1是读取配置文件的,如果不需要通过配置文件进行操作,就可以使用这个包.2是 ...

  5. vue 安装sass5.0版本遇到的问题

    cnpm install node-sass@4.9.2 --save-dev cnpm install sass-loader@7.3.1 --save-dev cnpm install style ...

  6. 摄像头与毫米波雷达(Radar)融合

    摄像头与毫米波雷达(Radar)融合 Input: (1)图像视频分辨率(整型int) (2)图像视频格式 (RGB,YUV,MP4等) (3)毫米波雷达点云信息(点云坐标位置x,y,浮点型float ...

  7. .Net RabbitMQ实战指南——进阶(二)

    持久化 持久化可以提高RabbitMQ的可靠性,防止异常情况下的数据丢失.RabbitMQ的持久化分为三个部分:交换器的持久化.队列的持久化和消息的持久化. 交换器的持久化通过声明队列时将durabl ...

  8. Java Spring boot 多商户入驻 外卖|跑腿|代驾 Uniapp版本

    技术说明: 源码下载:https://www.yuanmahy.com/8357.html 开发环境:jdk1.8,mysql5.7,node 9.4,redis6.2,npm6.9 开发工具:前端使 ...

  9. Linux CentOS 配置Yaf框架

    简介 Yaf框架想必大家都有所了解,它是一个开源的高性能的PHP框架 官网地址:https://www.php.net/manual/zh/book.yaf.php Yaf开发文档:https://w ...

  10. alert日志报错:ERROR: failed to establish dependency between database RACDB and diskgroup resource ora.DATA.dg

    一.打开数据库alert日志,发现有报错 ERROR: failed to establish dependency between database RACDB and diskgroup reso ...