使用全备+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日志 在 ...
随机推荐
- 2018牛客网暑期ACM多校训练营(第二场):discount(基环树DP)
题意:有N个不同的商品,每个商品原价是Pi元,如果选择打折,可以减少Di元. 现在加一种规则,每个商品有一个友好商品Fai,如果i用原价买,则可以免费买Fai. 现在问买到所有物品的最小价格. 思路 ...
- MongoDB 查看当前配置
MongoDB Enterprise > db.adminCommand({getParameter:"*"}) MongoDB Enterprise > db._ad ...
- 文件搜索命令——grep
1.查找关键字在文件中的一行的信息: 2.不区分大小写进行查询: #号开头表示注释行,并不是配置文件. 3.grep -v(排除查找): -v 可以去除掉某些没用的行,以上命令可以去除掉以#号开头的注 ...
- podium podlets 说明
podlets 提供了一个页面片段服务,podlets 包含了一些元数据信息,通过json 暴露, 主要包含以下内容 一个 http endpoint 提供主要内容 一个 http endpoint ...
- 8-网页,网站,微信公众号基础入门(使用Python程序实现微信token验证)
https://www.cnblogs.com/yangfengwu/p/11062034.html 设置一下IP白名单: 填写自己的服务器的IP地址 是不是不可以哈,有多少人都会入这个坑.... ...
- [RN] React Native 打包时 减少 Apk 的大小
React Native 打包时 减少 Apk 的大小 主要有两个方法: 在打包前设置 android\app\build.gradle 文件中 1) def enableProguardInRele ...
- VTK图像遮罩(vtkImageMask)
#!/usr/bin/env python import vtk reader = vtk.vtkJPEGReader() reader.SetFileName("Pygoscelis ad ...
- KVM系统镜像制作
使用virt-install创建虚拟机并安装GuestOS virt-install是一个命令行工具,它能够为KVM.Xen或其它支持libvirt API的hypervisor创建虚拟机并完成Gue ...
- 第08组 Alpha冲刺(5/6)
队名:955 组长博客:https://www.cnblogs.com/cclong/p/11898112.html 作业博客:https://edu.cnblogs.com/campus/fzu/S ...
- WAMP配置允许外网访问、绑定域名
如果wamp默认端口已经被占用,需要修改,则打开apache目录下的,conf文件下的httpd.conf文件 如图,把框中的默认80端口修改为自己需要的端口,然后重启WAMP即可. 想要实现外网访问 ...