记录一次MySQL数据恢复过程,以防止下次再发生类似的操作。
记录一次MySQL数据恢复过程,以防止下次再发生类似的操作。
MySQL版本:Ver 14.14 Distrib 5.6.20
问题描述:
上午不小心更新表中某一行记录的时候不小心,全部更新了。
执行的sql如下:
#update mondo_all set ip ='192.168.36.107'; where seq =3386;
可以看出来中间多了一个分号,导致整个表的记录都被修改了。
在修复数据之前,先要查看my.cnf中是否开启了 binlog功能。
具体查看方式是看my.cnf中是否配置了log_bin。如果没有配置,那就彻底没辙了。
工具:
binlog2sql
安装方式:
直接在线安装(我是安装在mysql目录下的):
shell> git clone https://github.com/danfengcao/binlog2sql.git
上面的命令执行完之后会生成一个binlog2sql的文件夹。
进入该目录,可以看到一个requirments.txt文件,然后执行如下命令:
shell>pip install -r requirements.txt
执行完上面的两条命令后,即可安装成功。
数据恢复:
在恢复数据之前,要先找到误操作的日志记录,可以根据操作时间在mysql的datadir 目录中找到对应的mysql-bin.xxxxxx形式的日志文件。
(我这里的datadir=/var/lib/mysql)
根据实际找到对应的操作记录日志:
然后在binlog2sql的安装目录执行如下操作:
shell>python binlog2sql/binlog2sql.py -h132.121.130.18 -P3306 -uroot -p'hdp123' -dtest -tmondo_all --start-file='mysql-bin.000348' |cat -n |more
上面的命令可以一页一页的翻看对应的日志记录,找到自己想要的日志记录。
导出回滚日志:
命令:$ python binlog2sql/binlog2sql.py -h132.121.130.18 -P3306 -uroot -p'hdp123' -dtest -tmondo_all --start-file='mysql-bin.000348' -B > rollback.sql
rollback.sql文件里面的sql应该是你想恢复的脚本。
然后执行:
shell> mysql -h132.121.130.18 -P3306 -u root -p < rollback.sql
注意:5.6的MySQL版本不能直接输入密码明文进行数据导入操作。
后记:
我这边的实际处理情况是:
我导出了上午执行的update语句脚本后,自己写了个简单的java程序进行处理的。
package com;
import java.awt.print.Printable;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
public class RollBack {
Connection conn = new MySqlTools().getConnection();
public void readFile(){
String filePath = "E:\\platspace\\ExcleTools\\bin\\doc\\rollback.sql";
File file = new File(filePath);
BufferedReader reader=null;
try {
reader = new BufferedReader(new FileReader(file));
int line = 1;
String tempString = null;
while((tempString = reader.readLine()) != null){
//System.out.println("第"+ line +"行:"+tempString);
regSplit(tempString);
line ++ ;
Thread.sleep(100);
}
reader.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
if (reader != null){
try {
reader.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
public void regSplit(String line){
//String s1 = "UPDATE `test`.`mondo_all` SET `has_deploy`='鏄?, `deploy_success`='Y', `sys_name`=NULL, `python_version`=NULL, `seq`=5605, `sheet_name`=NULL, `ip`='192.168.36.107', `mark`=NULL, `passwd`='mondev!@#123', `os_full`=NULL, `group_id`=NULL, `os`=NULL, `unit`=NULL WHERE `has_deploy`='鏄? AND `deploy_success`='Y' AND `sys_name` IS NULL AND `python_version` IS NULL AND `seq`=5605 AND `sheet_name` IS NULL AND `ip`='192.168.59.19' AND `mark` IS NULL AND `passwd`='mondev!@#123' AND `os_full` IS NULL AND `group_id` IS NULL AND `os` IS NULL AND `unit` IS NULL LIMIT 1; #start 120 end 1822999 time 2016-12-22 10:10:39";
String whereStr = line.split("WHERE")[1];
String[] sArray = whereStr.split("AND");
String seq = "";
String ip="";
for (int i = 0; i < sArray.length; i++) {
String temp = sArray[i];
if(temp.contains("`seq`=")){
seq = temp.substring(7, temp.length());
}
if(temp.contains("`ip`=")){
ip = temp.substring(7, temp.trim().length());
}
}
System.out.println(seq + "------------>" + ip);
try {
String sql = "update mondo_all set ip2='"+ip.trim()+"' where seq=" + Integer.parseInt(seq.trim()) ;
conn.prepareStatement(sql).execute();
System.out.print(" successfull.");
} catch (NumberFormatException e) {
System.out.println("更新失败.........");
e.printStackTrace();
} catch (SQLException e) {
System.out.println("更新失败.........");
e.printStackTrace();
}
}
public static void main(String[] args) {
new RollBack().readFile();
}
}
参考:
binlog2sql工具安装:http://www.qingpingshan.com/shujuku/mysql/175056.html
数据恢复参考:https://my.oschina.net/u/3119184/blog/802700
2016-12-22
dianxinguangchang.zhongsanerlu.yuexiuqu.guangzhoushi
听雨轩
分享到:
相关推荐
MySQL 数据恢复是数据库管理中的一项重要任务,尤其是在遭遇意外数据丢失、硬件故障或软件错误时。以下是三种常用的数据恢复方式的详细说明: 1. **通过表备份的方式**: 当数据表因各种原因如误删除、软件故障或...
MySQL数据恢复是一个重要的主题,尤其是在数据库管理中,数据的安全性和可恢复性是至关重要的。当面临数据丢失或数据库损坏的情况时,专业的MySQL数据恢复软件能够帮助我们找回宝贵的信息。本软件"sa_mysql_recovery...
### MySQL 数据恢复方法详解 #### 一、引言 在MySQL数据库管理中,数据安全至关重要。即便是经验丰富的DBA也可能因误操作导致数据丢失。本文将详细介绍如何在MySQL环境下利用binlog进行数据恢复,这对于刚接触...
通过binlog日志进行mysql数据恢复
根据mysql数据日志文件,自动生成对应的建表sql和数据恢复sql,可以对数据名和表明进行过滤。适用于设置为完整日志格式下的mysql数据库还原,包括误操作数据、数据库崩溃等多种情况下的数据库数据恢复。 ※※※※...
RAID6数据恢复软件V2.1是一款RAID6数据恢复软件,完全支持整个RAID6在缺少两块磁盘后进行完整数据恢复。 该软件是一款功能强大的RAID6数据恢复软件,完全支持整个RAID6在缺少两块磁盘后进行完整数据恢复。 完美...
#### 二、MySQL数据恢复基础知识 1. **逻辑备份与物理备份**: - **逻辑备份**通常是使用`mysqldump`工具将整个数据库导出为SQL脚本文件。 - **物理备份**则是直接复制数据库文件到备份介质上,如使用`cp`命令...
总之,MySQL数据恢复主要依赖于二进制日志和定期的全量备份。正确开启binlog并定期备份是防止数据丢失的关键步骤。在出现误操作时,及时停止所有写入操作,然后按照上述步骤进行恢复,可以最大程度地减少数据损失。...
二、MySQL数据恢复 1. **使用SQL脚本恢复**:恢复过程相对简单,只需将备份的SQL文件导入到MySQL服务器: ``` mysql -u [username] -p[password] [database_name] ``` 2. **基于二进制日志的恢复**:如果需要...
### MySQL根据日志恢复数据详细步骤 #### 一、引言 MySQL作为一款广泛使用的开源关系型数据库管理系统,因其高效稳定、易于维护等特性而深受开发者喜爱...希望本文能够帮助读者更好地理解和掌握MySQL的数据恢复技巧。
在本篇文章中,我们将深入探讨MySQL的数据恢复机制,包括其重要性、基本步骤、不同类型的备份策略以及高级恢复策略,以帮助读者更好地理解和实施数据保护措施。 #### MySQL 数据恢复的重要性 数据恢复是任何数据库...
文件级别数据库恢复工具软件,本软件适合于操作系统崩溃后将mysql数据目录拷贝出进行恢复,在恢复前需要使用之前备份的数据库结构新建空库,然后将还原文件的数据恢复到新库,目前只能恢复InnoDB引擎、MyISAM引擎 表...
1.1.7 MySQL的数据如何恢复到任意时间点?
MySQL 数据恢复通过 .frm 和 .ibd 文件 MySQL 是一种广泛使用的关系型数据库管理系统,它提供了高效、安全和可靠的数据存储和管理机制。但是,在实际应用中,数据库可能会出现各种故障,例如数据丢失、表结构异常等...
#### 二、MySQL数据恢复 为了确保数据的完整性和准确性,首先需要将MySQL的备份文件恢复到一个测试数据库中,然后再进行迁移操作。 **1. 恢复步骤** - 批量执行`.sql`文件,在MySQL测试库中重新建立表并恢复数据...
2. **数据恢复**:一旦发现可修复的错误,工具会尝试恢复数据,确保尽可能多的数据能够被挽救。 3. **日志分析**:对于InnoDB引擎,工具可能需要分析事务日志(Redo Log)来恢复未提交的事务,以保持数据一致性。 ...
这是我从网上找到的mysql/mariadb对innodb表进行数据恢复的工具,实现从innodb的数据库文件中恢复数据,用于实现下面情况:1、直接下载了innodb数据库的文件,而不是导出其数据,想恢复数据时(需要有完整的文件,...
MySQL 数据备份与恢复是数据库管理中的重要环节,它关乎到数据的安全性和业务的连续性。在本篇中,我们将深入探讨 MySQL 的三种主要备份恢复模式,以及如何利用工具如 `innobackupex` 实现高效的数据保护。 一、...
然而,数据库系统难免会遇到问题,如意外的数据丢失、错误操作或系统崩溃等,这时MySQL的日志和数据恢复机制就显得尤为重要。本文将深入探讨MySQL中的日志类型以及如何利用这些日志进行数据恢复。 1. 错误日志 ...