mysql 误删除数据恢复
mysql 误删除数据恢复
1.首先确认误删除了那些表的数据以及什么时间执行的删除操作
2.根据上面的时间去mysql服务器下载二进制日志
3.把下载的二进制日志文件上传到本地数据库服务器上,执行如下命令分析
mysqlbinlog --no-defaults -v -v --base64-output=DECODE-ROWS --start-datetime="2017-04-01 00:00:00" --stop-datetime="2017-04-01 00:18:50" /home/mysqldata/mysql-bin.000561 >rmdata.txt
mysqlbinlog --no-defaults -v -v --base64-output=DECODE-ROWS /home/mysqldata/mysql-bin.000562 >rmdata.txt
--start-datetime 开始时间
--stop-datetime 结束时间
4.提取相应表的删除语句
sed -n '/DELETE FROM `xxx`.`table_name`/,/@15=/{p}' rmdata.txt >tablename.txt
@15表中的最后一个字段
5.提取的delete语句转换成相应的insert语句
python recover.py tablename.txt 25 > tablename.sql
命令行中的25 表示 需要还原的表的字段有25个
recover.py 脚本内容如下(网上找的)
#!/bin/env python
# -*- encoding: utf-8 -*-
#-------------------------------------------------------------------------------
# Name: recover.py
# Purpose: 通过Binlog恢复Delete误操作数据
# Author:
# Created:
# update:
# Copyright:
# Licence:
#-------------------------------------------------------------------------------
def read_binlog(file,column_num):
f=open(file)
num = '@'+str(column_num)
while True:
lines = f.readline()
if lines.strip()[0:3] == '###':
lines=lines.split(' ',3)
if lines[1] == 'DELETE' and lines[2] =='FROM': #该部分替换Delete为Insert
lines[1] = "INSERT"
lines[2] = 'INTO'
lines[-1] = lines[-1].strip()
if lines[1].strip() == 'WHERE':
lines[1] = 'VALUES ('
if ''.join(lines).find('@') <> -1 and lines[3].split('=',1)[0] <> num: #num为列数,要是小于最大的列数,后面均加,
lines[3] = lines[3].split('=',1)[-1].strip()
if lines[3].strip('\'').strip().find('\'') <> -1:
lines[3] = lines[3].split('/*')[0].strip('\'').strip().strip('\'').replace('\\','').replace('\'','\\\'') #这里过滤掉转义的字符串
lines[3] = '\'' + lines[3] + '\','
elif lines[3].find('INT meta') <> -1: #过滤Int类型的字段为负数后带的(),正数不受影响
lines[3] = lines[3].split('/*')[0].strip()
lines[3] = lines[3].split()[0] + ','
elif lines[3].find('NULL') <> -1:
lines[3] = lines[3].split('/*')[0].strip()
lines[3] = lines[3] + ','
else:
lines[3] = lines[3].split('/*')[0].strip('\'').strip().strip('\'').replace('\\','').replace('\'','\\\'') #这里过滤掉转义的字符串
lines[3] = '\'' + lines[3].strip('\''' ') + '\','
if ''.join(lines).find('@') <> -1 and lines[3].split('=',1)[0] == num: #num为列数,要是小于最大的列数,后面均加);
lines[3] = lines[3].split('=',1)[-1].strip()
if lines[3].find('\'') <> -1:
lines[3] = lines[3].split('/*')[0].strip('\'').strip().strip('\'').replace('\\','').replace('\'','\\\'') #同上
lines[3] = '\'' + lines[3] + '\');'
elif lines[3].find('INT meta') <> -1: #同上
lines[3] = lines[3].split('/*')[0].strip()
lines[3] = lines[3].split(' ')[0] + ');'
elif lines[3].find('NULL') <> -1:
lines[3] = lines[3].split('/*')[0].strip()
lines[3] = lines[3] + ');'
else:
lines[3] = lines[3].split('/*')[0].strip('\'').strip().strip('\'').replace('\\','').replace('\'','\\\'') #同上
lines[3] = '\'' + lines[3].strip('\''' ') + '\');'
print ' '.join(lines[1:])
if lines == '':
break
if __name__ == '__main__':
import sys
read_binlog(sys.argv[1],sys.argv[2])
6.查看tablename.sql文件语句确认没有问题,执行语句即可恢复删除数据
mysql 误删除数据恢复相关推荐
- windows下mysql误删除数据恢复
1.进入到mysql所在的bin目录 mysql -u root -p -default-character-set=utf8 命令解释: -default-character-set:设置登录mys ...
- Mysql数据库误删除数据恢复成功
Mysql数据库误删除数据恢复成功 [客户描述] 客户在网站管理后台误操作把"报表"和"代理"数据删除,因数据库只有2月份的备份,丢失近三个月的数据. [数据库 ...
- win32 mysql误删数据恢复_mysql误删数据恢复
原创 mysql误删数据恢复我这里搜了一下,貌似好多方法,搜索表后是因为表太多所以看不完所以就看到了这篇文章,你看看你的数据重建了吗?或者点击按钮在目录下的文件恢复? 试试这个,如果没有的话,说明这个 ...
- 阿里云rds mysql数据库数据恢复到ecs中
背景: aliyun上的rds数据库快满了,于是删除了某个备份的表 后面大boss说是有用的表,需要恢复回来,阿里云有7天内的物理全量备份(通过percona-xtrabackup备份的) 第一时间应 ...
- mysql误删除表后无法重建
mysql误删除表,数据库为demo 情况:删除表problem提示不存在,新建problem表又提示已存在 解决方案 1.新建一个数据库test,执行create建表语句 2.cp 命令将test下 ...
- MySQL binlog 数据恢复
不求人,MySQL Binlog数据恢复 文章目录 不求人,MySQL Binlog数据恢复 浅谈恢复形式 开启 binlog 及配置 删库跑路(搭建测试数据库,然后删除它) 起死回生(分析binlo ...
- 宝塔数据库mysql误删除快速恢复
转载请注明: 藏羚骸的博客~宝塔数据库mysql误删除快速恢复. 新来的实习女大学生,在工作中,更新项目时一键清空大量数据表里的数据,是在没办法了找到我,仓皇失措泫然欲泣的,怕公司让自己承担损失,那么 ...
- mysql 误删除ibdata1,MySQL 误删除ibdata1之后的恢复方法
这篇文章主要为大家详细介绍了MySQL 误删除ibdata1之后的恢复方法,具有一定的参考价值,可以用来参考一下. 感兴趣的小伙伴,下面一起跟随512笔记的小编小韵来看看吧! mysql 误删除ibd ...
- 误删阿里云mysql恢复数据恢复_mysql数据库误删除后的数据恢复操作说明-阿里云开发者社区...
在日常运维工作中,对于mysql数据库的备份是至关重要的!数据库对于网站的重要性使得我们对mysql数据的管理不容有失! 然后,是人总难免会犯错误,说不定哪天大脑短路了来个误操作把数据库给删除了,怎么 ...
- Mysql主从异常 表被回滚_oracle表回滚到一个指定时间的操作语句 oracle 误删除数据恢复...
-- 1. 添加恢复功能. alter table 表名 enable row movement; -- 2. 查看恢复记录 select * from 表名 as of timestamp to_t ...
最新文章
- 数据结构--树和二叉树
- c语言中浮点数和整数转换_C中的数据类型-整数,浮点数和空隙说明
- 高效排序算法(快排序)
- 攻防世界Reverse第九题no-strings-attached
- uint8、double、mat2uint、imhist绘直方图w恩替藐视
- CSS实现自适应的图片背景边框代码
- 嵌入式成长轨迹23 【Linux应用编程强化】【Linux下的C编程 下】【Linux GUI编程】...
- php导出大量excel表,php导出大量数据到excel时,有哪些比较好的处理方法?
- labelimg如何调整框的颜色_P图改字:来看看吧!教你如何用PS墙壁发光灯泡广告文字图片...
- android+php最佳实践视频,Android和PHP开发最佳实践 PDF 第2版
- dpkg和apt-get命令的用法
- amd服务器开启虚拟化,记一次 AMD 虚拟化 IOMMU 开启过程
- Flex与Servlet之间数据的交互
- ElasticSearch全文搜索引擎之入门以及环境搭建
- Canvas对画布及文字控制基础API学习
- zepto 操作 cookie
- 魅族mx4pro刷linux,魅族MX4 Pro刷recovery教程_魅族MX4 Pro第三方recovery下载
- FeHelper的安装、使用
- 用latex生成pdf文件后,文本复制粘贴显示乱码
- Vue3 非常好用的中文文档以及一份 Vue 3 新文档学习笔记