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没有执行。

其他

  1. 要定期全备,不然恢复的时候需要恢复大量的binlog日志,容易出错
  2. 操作恢复前,做好备份
  3. 除了用位置筛选binlog日志,还可以用时间
  4. 有些恢复需要跨多个binlog文件

未经允许,请不要转载

使用全备+binlog日志恢复数据库的更多相关文章

  1. Mysql之binlog日志说明及利用binlog日志恢复数据操作记录

    众所周知,binlog日志对于mysql数据库来说是十分重要的.在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全备份+binlog日志恢复增量数据部分),化险为夷! 一 ...

  2. 解说mysql之binlog日志以及利用binlog日志恢复数据

    众所周知,binlog日志对于mysql数据库来说是十分重要的.在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全备份+binlog日志恢复增量数据部分),化险为夷! 废 ...

  3. 如何通过Mysql的二进制日志恢复数据库数据

    经常有网站管理员因为各种原因和操作,导致网站数据误删,而且又没有做网站备份,结果不知所措,甚至给网站运营和盈利带来负面影响.所以本文我们将和大家一起分享学习下如何通过Mysql的二机制日志(binlo ...

  4. Mysql利用binlog日志恢复数据操作(转)

    a.开启binlog日志:1)编辑打开mysql配置文件/etc/mys.cnf[root@vm-002 ~]# vim /etc/my.cnf在[mysqld] 区块添加 log-bin=mysql ...

  5. MySQL的binlog日志恢复(转)

    binlog 基本认识 MySQL的二进制日志可以说是MySQL最重要的日志了,它记录了所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日 ...

  6. 【转】Mysql之binlog日志说明及利用binlog日志恢复数据操作记录

    众所周知,binlog日志对于mysql数据库来说是十分重要的.在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全备份+binlog日志恢复增量数据部分),化险为夷! 废 ...

  7. 使用Binlog日志恢复误删的MySQL数据

    解到: MySQL的binlog日志是什么?通常是用来干什么的? 模拟一次误删数据的操作,并且使用binlog日志恢复误删的数据. 写这篇文章的初衷,是有一次我真的险些把测试数据库的一张表给删除了,当 ...

  8. MySQL二进制binlog日志说明以及利用binlog日志恢复数据

    MySQL的binlog日志对于mysql数据库来说是十分重要的.在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全量备份+binlog日志恢复增量数据部分). 一.关于 ...

  9. MySQL通过binlog日志恢复数据

    一.查看下自己的MySQL是否开启了binlog日志 # 是否启用binlog日志 OFF:关闭 ON:开启 show variables like 'log_bin'; 二.开启binlog日志 在 ...

随机推荐

  1. 201671010442 葸铃 实验十四 团队项目评审&课程学习总结

    项目 内容 这个作业属于哪个课程 课程 2016级计算机科学与工程学院软件工程(西北师范大学) 作业要求 实验十四 团队项目评审&课程学习总结 作业学习目标 团队项目评审&课程学习总结 ...

  2. Python基础笔记-元祖

    Python 的元组与列表类似,不同之处在于元组的元素不能修改. 元组使用小括号,列表使用方括号. 元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可. def main(): tup2 = ...

  3. 基线baseline

    vertical:元素的垂直对齐方式:默认 vertical:baseline ,一行内对其基线,如下图就是以父元素基线对齐,上图vertical:top 垂直对齐方式,行内元素头部对齐.

  4. 解决ie6下png背景不能透明bug

    /*第一种方法:通过滤镜 使用css解决的办法. 注意滤镜下的1像素透明gif的覆盖图片的路径是相对页面写的*/ /*注意:这个方法不适合处理img标签引入的png图片,代码太冗余了*/ .banne ...

  5. react navite 学习资料

    react 学习资料 https://github.com/crazycodeboy/GitHubPopular crazycodeboy/GitHubPopular https://github.c ...

  6. selenium 2 设置浏览器安装路径

    selenium 2由于调用的是真实的浏览器,所以当你的浏览器不是安装在默认路径下,你就需要设定浏览器启动路径:若是默认路径,则程序中不需设定浏览器启动路径. 比如说用firefox进行测试 1. f ...

  7. clr调试扩展和DAC

    SOS.DLL.SOSEX.DLL这两个就是用来对.NET程序在Windows调试工具中起到翻译作用的调试器扩展.简单讲就是,这两个组件是.NET项目组专门开发出来用来对.NET应用程序进行方便调试用 ...

  8. 交叉引用:Microsoft.NET标准异常 和错误代码对照表

    简介 此表旨在帮助将Windows运行时应用程序错误代码交叉引用到Microsoft.NET标准异常,这些异常可以作为应用程序异常处理技术的一部分. 对照表 .NET Exception (Names ...

  9. 16-网页,网站,微信公众号基础入门(网页版MQTT,页面控件位置调整入门)

    https://www.cnblogs.com/yangfengwu/p/11200767.html 说一下,只要你java学的很好,那么几乎所有的语言都不在话下了 来看一下样式设置 运行 在左上角感 ...

  10. Kmeans文档聚类算法实现之python

    实现文档聚类的总体思想: 将每个文档的关键词提取,形成一个关键词集合N: 将每个文档向量化,可以参看计算余弦相似度那一章: 给定K个聚类中心,使用Kmeans算法处理向量: 分析每个聚类中心的相关文档 ...