通过binlog恢复mysql数据库
在上一篇文章,我们讲解了有关mysql的binlog日志的基础知识。这篇文章,我们来讲解如何通过mysql的binlog日志来恢复数据库。
在使用binlog日志来恢复数据库之前,我们有一些前提工作需要做。步骤如下:
1、创建新的数据库ailanni
2、创建新的表ilannitable
3、向表ilannitable插入数据
4、刷新mysqlbin日志
5、完整备份ailanni数据库
6、删除表ilannitable插入的部分数据
7、删除数据库ailanni
8、各个binlog日志的内容解析
9、恢复ailanni全部数据
10、恢复ailanni数据库指定的部分
一、 创建新的数据库ailanni
使用以下命令创建数据库,如下:
mysql –h 192.168.1.213 -uroot -p123456
create database ailanni;
show databases;
二、 创建新的表ilannitable
使用以下命令创建表,如下:
use ailanni;
create table ilannitable(id int(4));
show tables;
三、 向表ilannitable插入数据
使用以下命令向表ilannitable中插入数据1、2,如下:
insert into ilannitable values(1);
insert into ilannitable values(2);
select id from ilannitable;
四、 刷新mysqlbin日志
此时mysql的binlog日志文件只有一个mysql-bin.000001,如下:
show master logs;
注意:此时mysql的binlog文件为mysql-bin.000001,并且数据库ailanni中只有1、2两条数据。如下:
select id from ilannitable;
现在我们来刷新binlog日志,生成新的binlog日志文件mysql-bin.000002,如下:
flush logs;
show master logs;
现在我们再次向ailanni数据库中插入新的数据3、4,如下:
insert into ilannitable values(3);
insert into ilannitable values(4);
数据3、4插入完毕后,我们再次刷新binlog日志,生成新的binlog日志文件为mysql-bin.000003,如下:
现在我们总共有三个binlog日志文件:mysql-bin.000001、mysql-bin.000002、mysql-bin.000003。其中在mysql-bin.000001中,我们向ilannitable表中插入两个数据1、2。在mysql-bin.000002中我们向ilannitable表中插入两个数据3、4。
我们可以查看binlog中的内容如下:
/usr/local/mysql/bin/mysqlbinlog /usr/local/mysql/data/mysql-bin.000001
/usr/local/mysql/bin/mysqlbinlog /usr/local/mysql/data/mysql-bin.000002
五、 完整备份ailanni数据库
现在我们来完整的备份ailanni数据库,使用mysqldump命令,如下:
/usr/local/mysql/bin/mysqldump -uroot -p123456 ailanni >/root/ailanni.sql
查看备份文件是否与ailanni数据库的内容一致,如下:
cat ailanni.sql
通过上图可知,备份的数据库文件与ailanni数据库的内容是一致的。
六、 删除表ilannitable插入的部分数据
在第三、四步中,我们向表ilannitable中插入了1、2、3、4四个数据。为了模拟在ailanni数据库被破坏后的实际情形,我们现在把ailanni数据库中的3这条数据给删除,如下:
delete from ilannitable where id=3;
此时我们再次刷新binlog日志,生成新的binlog日志文件为mysql-bin.000004,如下:
flush logs;
show master logs;
七、 删除数据库ailanni
在第六步中,我们删除了数据记录3,现在我们来删除ailanni数据库。如下:
drop database ailanni;
show databases;
删除完毕后,我们再次刷新binlog日志,生成新的binlog日志文件为mysql-bin.000005,如下:
flush logs;
show master logs;
八、 各个binlog日志的内容解析
现在mysql的binlog日志文件有5个,从mysql-bin.000001到mysql-bin.000005,其中在mysql-bin.000001中我们向ilannitable表中插入了1、2两条数据。
在mysql-bin.000002中我们向ilannitable表中插入了3、4两条数据,在mysql-bin.000003中我们从表ilannitable删除了3这条数据。在mysql-bin.000004中我们把ailanni数据库给删除了。
各个binlog日志的SQL操作语句,如下:
/usr/local/mysql/bin/mysqlbinlog /usr/local/mysql/data/mysql-bin.000001
/usr/local/mysql/bin/mysqlbinlog /usr/local/mysql/data/mysql-bin.000002
/usr/local/mysql/bin/mysqlbinlog /usr/local/mysql/data/mysql-bin.000003
/usr/local/mysql/bin/mysqlbinlog /usr/local/mysql/data/mysql-bin.000004
九、 恢复ailanni全部数据
现在我们要恢复ailanni数据库,在此首先有关ailanni数据库是否存在的情况要说明下。
如果目前mysql数据库服务器上有ailanni这个数据库,那么我们在恢复数据时,就不需要重新创建ailanni数据库。如果目前mysql数据库服务器上没有ailanni这个数据库,那么我们就需要重新创建一个空的ailanni数据库。即该数据库只是一个空的库,里面没有任何表或者其他的元素。
如果不创建ailanni数据库的话,我们在通过mysql命令恢复数据库时,系统就会报错,如下:
在第五步时,我们备份的数据库是ailanni数据库全部的数据。如果要恢复ailanni数据库全部数据的话,我们只需要执行mysql命令导入备份的sql文件即可。如下:
create database ailanni;
/usr/local/mysql/bin/mysql -uroot -p123456 ailanni</root/ailanni.sql
查看恢复后的ailanni数据库是否和被删除之前的数据一样,如下:
mysql -uroot -p123456
use ailanni;
select id from ilannitable;
通过上图,我们可以很明显的看到目前ailanni数据库已经被全部恢复,而且数据一个也没有丢失。
十、 恢复ailanni数据库指定的部分
在通过mysql的binlog日志恢复数据库时,我们可以指定数据库恢复的位置、恢复的时间,同时也可以不指定数据库恢复的位置和时间。
有关mysqlbinlog命令的使用方法,我们可以通过mysqlbinlog的帮助命令进行查看,如下:
/usr/local/mysql/bin/mysqlbinlog –help
注意图中标记出来的数字,其中1和2是表示通过binlog恢复数据的开始和结束时间,3和4表示的binlog恢复数据的开始和结束位置。
其中时间我们都知道,看下binlog的日志文件内容就知道了。而位置就是我们在前面查看各个binlog日志内容时标记出来的数字部分。如下:
图中被标出来的黄色部分数字5表示时间,6表示位置的节点,位置节点我们也称为binlog的pos点。
10.1不指定位置和时间来恢复数据库
我们先来测试不指定时间和位置来恢复数据库。
在第九步中我们恢复了ailanni全部的数据库,现在我们要求把数据库恢复到删除数据记录3时的状态。即ailanni数据库中只有1、2、4,这三条数据。这个时候我们就要根据mysql的binlog日志进行恢复,要不然达不到这个要求。
在第八步中我们已经分析了各个binlog日志中执行的SQL语句。根据分析,我们需要使用mysql-bin.000003这个binlog日志来恢复数据库。现在我们再次查看该binlog日志,如下:
/usr/local/mysql/bin/mysqlbinlog /usr/local/mysql/data/mysql-bin.000003
删除3这条数据后,ailanni数据库中的数据记录情况也就是我们恢复数据库后所要的状态。如下:
现在我们来通过mysqlbin来恢复删除3这条数据时的数据库,使用如下命令:
/usr/local/mysql/bin/mysqlbinlog /usr/local/mysql/data/mysql-bin.000003 |mysql -uroot -p123456
通过上图我们可以看到此时数据库ailanni已经恢复到删除数据3时的状态了,ailanni数据库中确实只有1、2、4,这三条数据。这样也达到我们的要求了。
重要说明:
通过上面的文章,我们知道现在ailanni数据库的情况是,已经恢复全部数据。
为了做下面的实验,我们就要把ailanni数据库恢复到还没有进行完全备份之前的状态,即ailanni数据库还没有数据的状态。我们需要做的是清空现在的ailanni数据库,保持ailanni是一个空的数据库。但是ailanni数据库的表结构、主键、外键等等信息都是完整的。
同时还要说明下:如果在同一个时间点,binlog日志中有执行过多条sql语句的话,那么我们在恢复数据库时,一定要根据pos点的位置来恢复数据,切记切记。因为此时在binlog日志中,时间节点是一样的,但是pos位置节点是唯一的。
因此在通过binlog恢复数据库时,强烈建议使用pos位置节点的方法来恢复数据。
清空ailanni数据库使用以下命令,如下:
delete from ilannitable;
select id from ilannitable;
有关这个情况,我会再写一篇文章。
现在我们得到的是一个没有数据的ailanni数据库,这样我们下面的实验就可以继续进行。
10.2指定时间来恢复数据库
要求恢复到删除数据记录3时的数据库。即数据库中只有1、2、4,这三条数据。
还是和10.1要求是一样的,但是这次我们根据时间点来恢复数据。我们也需要一个空的ailanni数据库,这个我们可以通过前面的说明可以得到。
现在我们再次查看mysql-bin.000003文件,如下:
/usr/local/mysql/bin/mysqlbinlog /usr/local/mysql/data/mysql-bin.000003
注意图中黄色部分标记出来的时间点,我们可以看到在这个时间点之后,数据3就被删除了。我们恢复数据,就恢复到这个时间点即可达到要求。使用以下命令进行恢复,如下:
/usr/local/mysql/bin/mysqlbinlog –stop-datetime=’2014-11-17 11:30:43′ /usr/local/mysql/data/mysql-bin.000003 |mysql -uroot -p123456
mysql -uroot -p123456
use ailanni;
select id from ilannitable;
通过上图,我们可以看到通过时间点来恢复数据库也达到我们的要求,并且ailanni数据库中确实只有1、2、4,这三条数据。
10.3指定位置来恢复数据库
要求把数据库ailanni恢复到插入数据3后,未插入数据4时的状态。即数据库ailanni中只有数据1、2、3,这三条数据。
分析要达到此要求,我们只能通过binlog日志的方式来恢复数据。根据第八步的binlog日志可以得知,要想恢复到此时的数据库,那么我们就要使用mysql-bin.000002这个日志文件。
要到达上述的目的,我们需要先来恢复数据1、2,使用mysql-bin.000001文件,如下:
/usr/local/mysql/bin/mysqlbinlog /usr/local/mysql/data/mysql-bin.000001 |mysql -uroot -p123456
数据1、2恢复后,我们现在正式开始恢复插入数据3后,未插入数据4时的数据库。
再次查看mysql-bin.000002日志文件,如下:
/usr/local/mysql/bin/mysqlbinlog /usr/local/mysql/data/mysql-bin.000002
注意图中标记出来的数字304,这个就是binlog的pos节点位置。我们可以看到在该pos节点后mysql才执行插入数据4的SQL语句。那么我们只需要把数据恢复这个节点即可。
使用如下命令进行恢复数据,如下:
/usr/local/mysql/bin/mysqlbinlog –stop-position=304 /usr/local/mysql/data/mysql-bin.000002 |mysql -uroot -p123456
通过上图,我们现在可以看到ailanni数据库已经恢复到插入数据3之后,未插入4的状态。现在ailanni数据库中确实只有1、2、3,这三条数据,已经达到我们的要求。
到此我们有关通过binlog日志恢复mysql数据库告一段落。
通过binlog恢复mysql数据库相关推荐
- 通过binlog恢复mysql备份之前的数据
上一篇文章,我们讲解了如何通过mysql的binlog日志恢复mysql数据库,文章连接为<烂泥:通过binlog恢复mysql数据库>.其中我们提到了的备份数据库要晚与要恢复的数据库时间 ...
- mysql 刷新二进制日志_使用binlog日志恢复MySQL数据库删除数据的方法
binlog日志简介: binlog 就是binary log,二进制日志文件,这个文件记录了MySQL所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间. b ...
- 如何利用MySQL的binlog恢复误删数据库详解
文章来源: 学习通http://www.bdgxy.com/ 目录 1 查看当前数据库内容并备份数据库 2 开启bin_log功能 3 模拟误操作(插入3条数据,删除数据库) 4 数据恢复 5 总结 ...
- mysql怎么备份和恢复_如何优雅的备份和恢复Mysql数据库?
谢邀,个人认为从标题看,是个比较大而且值得数据库从业者思考的问题:从问题描述看,又是一个比较浅显的问题. 先从问题描述看,mysqldump 备份和恢复时往往会有各种错误,如何避免?mysqldump ...
- php备份mysql页面_如何用PHP的页面备份、恢复Mysql数据库_php
//备份数据 $i = 0; $crlf="/r/n"; $dbname="xgtqr"; global $dbconn; http://www ...
- 电脑重装系统后如何恢复Mysql数据库
原文地址: 电脑重装系统后如何恢复Mysql数据库 http://www.thebigdata.cn/JieJueFangAn/30831.html 电脑重装系统后如何恢复Mysql数据库 [日期 ...
- mysql系统数据库 恢复_电脑重装系统后如何恢复 Mysql 数据库
电脑重装系统后如何恢复 Mysql 数据库 一.[设置mysql的path] 比如:我的mysql在:D:\DataBase\mysql-5.7.13-winx64,可以在环境变量中重新新建一个环境变 ...
- mysql zrm 配置_利用MySQL-zrm来备份和恢复MySQL数据库方法详解
MySQL ZRM 工具是用PERL写的可以全部和增量备份MySQL数据库的一个强大工具. 还可以做快照,不过我现在没有条件做.等以后有可以做了再补上. 其实具体要说的也没啥,我只是做了点测试. 这里 ...
- 恢复mysql数据库详细图解_binlog恢复mysql数据库超详细步骤
日常的数据备份及恢复测试,是DBA工作重中之重的事情,所以要做好备份及测试,日常的备份常见有mysqldump+binlog备份.xtrabackup+binlog备份,无论那一种,几乎都少不了对bi ...
- mysql 日志文件 自动_自动恢复MySQL数据库的日志文件思路分享及解决方案
如果MySQL服务器启用了二进制日志,你可以使用mysqlbinlog工具来恢复从指定的时间点开始 (例如,从你最后一次备份)直到现在或另一个指定的时间点的数据."mysqlbinlog:用 ...
最新文章
- PHP feof() 函数读文件的使用
- Python使用matplotlib可视化多个时间序列数据、添加双Y轴、以显示具有不同尺度的时间序列数据(secondary y axis)
- HTML怎么编写可关闭广告,JS实现关闭小广告特效
- django时间格式化加时区控制
- 旅游风景展示应用源码iPad版
- MP3文件转换成arduino可以直接播放的wav格式,MP3转WAV工具
- 2020 操作系统第三次习题
- 告诉你一个可怕的数学事实:公路越多,城市越堵!
- c语言是非结构化程序语言_一个资深C语言工程师说C语言的重要性!直言道:不学C学什么?...
- 蔬菜出口流程 |外贸流程
- 如何用uniapp+vue开发自定义相机插件——拍照+录像功能
- 嘉为蓝鲸CMP云管平台入选Gartner《中国云管理工具市场指南》
- 抗混叠滤波器 - ADC前端放大器和RC滤波器设计实现步骤
- AJ1变色龙79.9/阿迪39.9/二裂酵母套盒39.9/有情洗发水9.9/
- 23.MongoDB地理位置检索
- 基于Mapbox的地图样式规范
- 如何获取屏幕保护程序的密码
- 程序员放弃年薪百万的大厂去创业公司拿期权,女友:风险太大了
- go get google.golang.org/grpc 解决办法汇总
- 2021年09月虹科Pico汽车示波器简报
热门文章
- Windows 安装kafka-python库
- 量子计算机人类复活,死人有没有可能复活?从量子尺度来分析是有可能
- oracle如何查找谁删除了数据_php如何删除session中数据
- Spring Cloud学习笔记---一分钟知晓Zuul
- android studio for android learning (十) android之activity的启动和关闭
- ios上java代码实现_IOS学习之路五(代码实现UITableView)
- html按钮的ui,button按钮 - 基础 - H-ui前端框架官方网站
- colspan会影响内部单元格宽度失效_封装胶残留致MEMS振动传感器失效分析
- 深入理解二阶段提交协议(DDB对XA悬挂事务的处理分析)(一)
- MSIL实用指南-一维数组的操作