博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql数据恢复
阅读量:4624 次
发布时间:2019-06-09

本文共 2313 字,大约阅读时间需要 7 分钟。

1.找到mysql mysql-bin* 存放位置。查看安装路径 ps -ef |grep mysql

2.连接数据库 mysql -h127.0.0 -uuser -ppwd 

 查看当前所记录的mysql-bin 文件 show master status;
   记下 File 字段值 (这个就是当前的log文件)
3.退出mysql客户端
   回到mysql mysql-bin* 存放位置。

4.从log文件中找出你删除执行的语句

 按时间
 mysqlbinlog --no-defaults --start=''2015-1-8 12:00:00' --stop='2015-1-9 12:00:00'  -vv mysql-bin.000001 > binlog.txt
 按语句
   mysqlbinlog --no-defaults -vv --base64-output=DECODE-ROWS mysql-bin.000001 | sed -n '/DELETE FROM dbname.tablename/,/COMMIT/p'
   如果找不到你执行的语句 那就先截取操作大概范围(比如在11:34分左右执行的 就可以截取10:00 到 11:50) 然后保存到另一个文件,慢慢分析 比如:
   cat -n binlog.txt |grep "DELETE FROM dbname.tablename" 找到所执行的代码行号 在用 sed -n '33,40p' filename

 5.截取结果张这样

### UPDATE db01.t1### WHERE###   @1=3/* INT meta=0 nullable=0 is_null=0 */ ### @2='liany'/* STRING(60) meta=65084 nullable=0 is_null=0 */ ### @3=2/* ENUM(1 byte) meta=63233 nullable=0 is_null=0 */ ### @4='beijing'/* VARSTRING(90) meta=90 nullable=0 is_null=0 */ ### SET ### @1=3/* INT meta=0 nullable=0 is_null=0 */ ### @2='liany'/* STRING(60) meta=65084 nullable=0 is_null=0 */ ### @3=2/* ENUM(1 byte) meta=63233 nullable=0 is_null=0 */ ### @4='zhuhai'/* VARSTRING(90) meta=90 nullable=0 is_null=0 */ # at 1825 #14030510:52:24 server id1 end_log_pos 1852 Xid = 26 COMMIT/*!*/; 然后用sed处理
sed'/WHERE/{:a;N;/SET/!ba;s/\([^\n]*\)\n\(.*\)\n\(.*\)/\3\n\2\n\1/}' t1.txt | sed -r '/WHERE/{:a;N;/@4/!ba;s/### @2.*//g}' | sed's/### //g;s/\/\*.*/,/g' | sed'/WHERE/{:a;N;/@1/!ba;s/,/;/g};s/#.*//g;s/COMMIT,//g' | sed'/^$/d' > recover.sql 然后得到
UPDATE db01.t1SET  @1=1 ,  @2='daiiy' , @3=2 , @4='guangzhou' , WHERE @1=1 ;

其中 @1 @2 @3 对应的是你表的字段(左到右)

在处理

 sed -i 's/@1/id/g;s/@2/name/g;s/@3/sex/g;s/@4/address/g' recover.sql
 sed -i -r 's/(address=.*),/\1/g' recover.sql

验证一样语句对不对 cat recover.sql

6.链接数据库 mysql -h127.0.0 -uuser -ppwd

7.导入sql语句 source ~/recover.sql

相关语句

传送文件 scp filename user@host:addr(存放地址)

查看文件 less more head tail sed -n '10,100p'

导出sql 导出整个数据库 mysqldump -u userName -p dabaseName > fileName.sql

    导出数据库表结构 mysqldump -u userName -p -d dabaseName > fileName.sql

    导出表数据 mysqldump -u userName -p dabaseName tableName > fileName.sql

    导出表结构 mysqldump -u userName -p -d dabaseName tableName > fileName.sql

 

上面是用mysql log_bin恢复数据 前提是有打开日志 查看是否打开:show variables like 'log_bin';

恢复数据 要么有备份要么有开log_bin 不然貌似没办法了。

 

 

 

 

转载于:https://www.cnblogs.com/MrtL/p/6270714.html

你可能感兴趣的文章
51nod1103(抽屉原理)
查看>>
C++ TCP客户端网络消息发送接收同步实现
查看>>
装饰器
查看>>
-------- Rootkit 核心技术——利用 nt!_MDL 突破 KiServiceTable 的只读访问限制 Part II --------...
查看>>
05_ssm基础(四)之Spring基础二
查看>>
扬州社保关系转入
查看>>
程序员跳槽全攻略pdf
查看>>
Visual Basic开发实战1200例(第I卷)pdf
查看>>
详细讲解Quartz.NET
查看>>
Hibernate五大核心接口简介
查看>>
提高生产性工具(四) - XML数据库的尝试
查看>>
ural 1005 Stone Pile DP
查看>>
15个极好的Linux find命令示例(二)
查看>>
sql loader
查看>>
UIDatePicker封装
查看>>
破损的键盘
查看>>
第八届蓝桥杯-承压计算
查看>>
callable函数
查看>>
day15—jQuery UI之widgets插件
查看>>
springboot测试
查看>>