使用全备+binlog日志恢复数据库
1.binlog日志类型
- Statement 只记录执行的sql语句,磁盘占用少,但是恢复的时候容易出问题。InodeDB不能使用Statement 。
- Row 记录修改后的具体数据,磁盘占用较多
- Mixed 上面两种混合,mysqlsql根据具体情形,选择较好的方案
查看当前的类型:
show variables like 'binlog_format'
/etc/my.cnf 里面的binlog_format参数
2. 恢复方式
全备+恢复部分binlog日志
3.恢复方法
1. 全备
mysqldump -uroot -pfjselinfgsiengiseg test3 > /data1/test3.sql.
2. 执行操作
SQL1:update student set age=21 where id=4;
SQL2:update student set age=22 where id=5;
这时执行了两个sql,对应的是两个事务。
如果我们想把数据库状态恢复到执行SQL1之后
3.刷新日志
要刷新日志后,我们才能查看日志,找到需要恢复的binlog
执行:
flush logs;
4. 找到最新的日志
找到binlog日志:/var/lib/mysql/mysql-bin.000031
5. 分析日志
mysql执行:
show binlog events in "mysql-bin.000031"
- Log_name 日志文件名
- Pos 事件的开始位置
- Event_type事件类型
- Server_id服务器ID,和主从关系的server_id对应
- End_log_pos 事件的结束位置
- Info 事件信息
找到刚才的两次事务
|
mysql-bin.000031 | 6622 | Query | 1 | 6691 | BEGIN |
| mysql-bin.000031 | 6691 | Table_map | 1 | 6745 | table_id: 308 (test3.student) |
| mysql-bin.000031 | 6745 | Update_rows | 1 | 6801 | table_id: 308 flags: STMT_END_F |
| mysql-bin.000031 | 6801 | Xid | 1 | 6828 | COMMIT /* xid=6771600 */ |
| mysql-bin.000031 | 6828 | Query | 1 | 6897 | BEGIN |
| mysql-bin.000031 | 6897 | Table_map | 1 | 6951 | table_id: 308 (test3.student) |
| mysql-bin.000031 | 6951 | Update_rows | 1 | 7007 | table_id: 308 flags: STMT_END_F |
| mysql-bin.000031 | 7007 | Xid | 1 | 7034 | COMMIT /* xid=6771607 */ |
| mysql-bin.000031 | 7034 | Rotate | 1 | 7077 | mysql-bin.000032;pos=4 |
+------------------+-------+--------------+-------------+---------------+-----------------------------------------------------------------------------+
BEGIN是开始事务
COMMIT是提交事务
所以我们需要恢复的是6622 到 6828
6.重新建库
把旧的test3数据库改名,或者删除。建议先备份
drop database test3;
创建数据库test3
create database test3;
导入全备份
source /data1/test3.sql;
恢复部分binlog日志
mysqlbinlog --start-position=6622 --stop-position=6828 --database=test3 /var/lib/mysql/mysql-bin.000031 |mysql -uroot -pfjselinfgsiengiseg -D test3
- start-position 开始位置
- stop-position 结束位置
- database 只获取test3库的日志
- /var/lib/mysql/mysql-bin.000031 binlog日志路径
mysqlbinlog 命令会把对应的binlog日志转换为sql语句,导出来,然后通过mysql命令来执行sql语句
恢复前的数据:
mysql root@localhost:test3> select * from student;
+------+--------+-------+---------+
| id | name | age | class |
|------+--------+-------+---------|
| 4 | 2 | 20 | B |
| 5 | 2 | 21 | B |
+------+--------+-------+---------+
恢复后的数据
mysql root@localhost:test3> select * from student;
+------+--------+-------+---------+
| id | name | age | class |
|------+--------+-------+---------|
| 4 | 2 | 21 | B |
| 5 | 2 | 21 | B |
+------+--------+-------+---------+
可以看到,SQL1执行了,SQL2没有执行。
其他
- 要定期全备,不然恢复的时候需要恢复大量的binlog日志,容易出错
- 操作恢复前,做好备份
- 除了用位置筛选binlog日志,还可以用时间
- 有些恢复需要跨多个binlog文件
未经允许,请不要转载
使用全备+binlog日志恢复数据库的更多相关文章
- Mysql之binlog日志说明及利用binlog日志恢复数据操作记录
众所周知,binlog日志对于mysql数据库来说是十分重要的.在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全备份+binlog日志恢复增量数据部分),化险为夷! 一 ...
- 解说mysql之binlog日志以及利用binlog日志恢复数据
众所周知,binlog日志对于mysql数据库来说是十分重要的.在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全备份+binlog日志恢复增量数据部分),化险为夷! 废 ...
- 如何通过Mysql的二进制日志恢复数据库数据
经常有网站管理员因为各种原因和操作,导致网站数据误删,而且又没有做网站备份,结果不知所措,甚至给网站运营和盈利带来负面影响.所以本文我们将和大家一起分享学习下如何通过Mysql的二机制日志(binlo ...
- Mysql利用binlog日志恢复数据操作(转)
a.开启binlog日志:1)编辑打开mysql配置文件/etc/mys.cnf[root@vm-002 ~]# vim /etc/my.cnf在[mysqld] 区块添加 log-bin=mysql ...
- MySQL的binlog日志恢复(转)
binlog 基本认识 MySQL的二进制日志可以说是MySQL最重要的日志了,它记录了所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日 ...
- 【转】Mysql之binlog日志说明及利用binlog日志恢复数据操作记录
众所周知,binlog日志对于mysql数据库来说是十分重要的.在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全备份+binlog日志恢复增量数据部分),化险为夷! 废 ...
- 使用Binlog日志恢复误删的MySQL数据
解到: MySQL的binlog日志是什么?通常是用来干什么的? 模拟一次误删数据的操作,并且使用binlog日志恢复误删的数据. 写这篇文章的初衷,是有一次我真的险些把测试数据库的一张表给删除了,当 ...
- MySQL二进制binlog日志说明以及利用binlog日志恢复数据
MySQL的binlog日志对于mysql数据库来说是十分重要的.在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全量备份+binlog日志恢复增量数据部分). 一.关于 ...
- MySQL通过binlog日志恢复数据
一.查看下自己的MySQL是否开启了binlog日志 # 是否启用binlog日志 OFF:关闭 ON:开启 show variables like 'log_bin'; 二.开启binlog日志 在 ...
随机推荐
- 201671010442 葸铃 实验十四 团队项目评审&课程学习总结
项目 内容 这个作业属于哪个课程 课程 2016级计算机科学与工程学院软件工程(西北师范大学) 作业要求 实验十四 团队项目评审&课程学习总结 作业学习目标 团队项目评审&课程学习总结 ...
- Python基础笔记-元祖
Python 的元组与列表类似,不同之处在于元组的元素不能修改. 元组使用小括号,列表使用方括号. 元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可. def main(): tup2 = ...
- 基线baseline
vertical:元素的垂直对齐方式:默认 vertical:baseline ,一行内对其基线,如下图就是以父元素基线对齐,上图vertical:top 垂直对齐方式,行内元素头部对齐.
- 解决ie6下png背景不能透明bug
/*第一种方法:通过滤镜 使用css解决的办法. 注意滤镜下的1像素透明gif的覆盖图片的路径是相对页面写的*/ /*注意:这个方法不适合处理img标签引入的png图片,代码太冗余了*/ .banne ...
- react navite 学习资料
react 学习资料 https://github.com/crazycodeboy/GitHubPopular crazycodeboy/GitHubPopular https://github.c ...
- selenium 2 设置浏览器安装路径
selenium 2由于调用的是真实的浏览器,所以当你的浏览器不是安装在默认路径下,你就需要设定浏览器启动路径:若是默认路径,则程序中不需设定浏览器启动路径. 比如说用firefox进行测试 1. f ...
- clr调试扩展和DAC
SOS.DLL.SOSEX.DLL这两个就是用来对.NET程序在Windows调试工具中起到翻译作用的调试器扩展.简单讲就是,这两个组件是.NET项目组专门开发出来用来对.NET应用程序进行方便调试用 ...
- 交叉引用:Microsoft.NET标准异常 和错误代码对照表
简介 此表旨在帮助将Windows运行时应用程序错误代码交叉引用到Microsoft.NET标准异常,这些异常可以作为应用程序异常处理技术的一部分. 对照表 .NET Exception (Names ...
- 16-网页,网站,微信公众号基础入门(网页版MQTT,页面控件位置调整入门)
https://www.cnblogs.com/yangfengwu/p/11200767.html 说一下,只要你java学的很好,那么几乎所有的语言都不在话下了 来看一下样式设置 运行 在左上角感 ...
- Kmeans文档聚类算法实现之python
实现文档聚类的总体思想: 将每个文档的关键词提取,形成一个关键词集合N: 将每个文档向量化,可以参看计算余弦相似度那一章: 给定K个聚类中心,使用Kmeans算法处理向量: 分析每个聚类中心的相关文档 ...