欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

phpmyadmin誤刪表后使用二進(jìn)制恢復(fù)表的方法

  發(fā)布時(shí)間:2014-03-02 15:34:43   作者:佚名   我要評(píng)論
在用phpmyadmin刪除測(cè)試數(shù)據(jù)時(shí),將整個(gè)表刪除了,這里介紹使用phpmyadmin的二進(jìn)制恢復(fù)表的方法

在用phpmyadmin刪除測(cè)試數(shù)據(jù)時(shí),竟然將整個(gè)表刪除了:

等程序運(yùn)行出錯(cuò)時(shí),才出現(xiàn)整個(gè)表都沒(méi)有了,而且之前也沒(méi)有備份好!

服務(wù)器是linux的,我不是很熟悉,也不知道m(xù)ysql裝在哪。

我在phpmyadmin中看到了這個(gè):

腦里出來(lái)了google上說(shuō)的用二進(jìn)制恢復(fù),就點(diǎn)開(kāi)看一下。結(jié)果大喜!OMG,服務(wù)器開(kāi)通了日志!

里面有數(shù)據(jù)庫(kù)的操作日志,而且還是sql格式的?。。?/p>

我之前沒(méi)有接觸過(guò)這個(gè)東西,但這時(shí)它就是我的救命稻草。

我瀏覽了一下,里面有近一個(gè)月的更新記錄,已經(jīng)足夠了。不過(guò)有一個(gè)問(wèn)題,在phpmyadmin里面看,只能顯示其中一小部份內(nèi)容,面對(duì)10幾w的數(shù)據(jù)行,想要一個(gè)個(gè)找出被刪表的數(shù)據(jù),太難了。

這時(shí),我想到了可以從服務(wù)器中下載這些文件,然后得到其中的數(shù)據(jù)。

說(shuō)干就干,我登錄服務(wù)器,搜索這些二進(jìn)制文件:

上圖中紅圈的就是了

然后將這些文件一個(gè)個(gè)導(dǎo)出成可以閱讀的sql:

這樣將這些二進(jìn)制文件一個(gè)個(gè)輸出成了正常的sql文件。

這時(shí),就是要從這些文件中找到被刪表相關(guān)的數(shù)據(jù)了,于是我寫(xiě)了個(gè)java程序幫我做這個(gè)事情:


復(fù)制代碼
代碼如下:

package com.nerve.sql.reload;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.List;

import org.nerve.util.NumberUtil;

/**
* @project: cloudOffice_swing
* @file: ReloadWorker.java
* @package: com.nerve.sql.reload
* @description:
* 將二進(jìn)制日志導(dǎo)出的文件中相應(yīng)表的操作記錄提出出來(lái)
* @author: 集成顯卡 <a href="mailto:1053214511@qq.com">1053214511@qq.com</a>
* @date&time: Jan 23, 2014
* @change log:
*/
public class ReloadWorker {

public void read(List<String> orgF, String targetF, String table) throws Exception{
BufferedWriter bw = new BufferedWriter(new FileWriter(targetF, true));

for(String or:orgF){
BufferedReader br = new BufferedReader(new FileReader(or));
String t = null;
String t2 = null;
table = table.toUpperCase();
while((t=br.readLine())!=null){
t2 = t.toUpperCase();
/*
* 如果是update操作,直接提出
*/
if(t2.startsWith("UPDATE "+table)){
bw.append(t+";\n");
}
/*
* 如果是insert語(yǔ)句,因?yàn)橛幸恍┡f服務(wù)器的數(shù)據(jù)
* 所以要先執(zhí)行delete操作
*/
else if(t2.startsWith("INSERT INTO "+table)){
String ids = t2.substring(t2.lastIndexOf(","));
bw.append("delete from "+table+" where id="+NumberUtil.toDigital(ids)+";\n");
bw.append(t+";\n");
}
/*
* sql語(yǔ)句后面都要加 ; ,因?yàn)樵瓉?lái)沒(méi)有,不加的話,在導(dǎo)入到數(shù)據(jù)庫(kù)時(shí),出錯(cuò)
*/
}
br.close();
}

bw.flush();
bw.close();
}

public static void main(String[] args) throws Exception{
long sd = System.currentTimeMillis();
ReloadWorker w = new ReloadWorker();
List<String> orgs = new ArrayList<String>();
orgs.add("C:/Users/IBM_ADMIN/Desktop/000015.txt");
orgs.add("C:/Users/IBM_ADMIN/Desktop/000016.txt");
orgs.add("C:/Users/IBM_ADMIN/Desktop/000017.txt");
orgs.add("C:/Users/IBM_ADMIN/Desktop/000018.txt");
orgs.add("C:/Users/IBM_ADMIN/Desktop/000019.txt");

String targetS = "C:/Users/IBM_ADMIN/Desktop/000017_sql.txt";
w.read(orgs, targetS, "task");

System.out.println("DONE, on " +(System.currentTimeMillis() - sd)/1000+" s");
}
}

得到了匯總的sql文件后,就導(dǎo)入到數(shù)據(jù)庫(kù)中。

最后,出一個(gè)運(yùn)行圖:

 

終于松了一口氣。

相關(guān)文章

最新評(píng)論