我瀏覽了一下,里面有近一個月的更新記錄,已經足夠了。不過有一個問題,在phpmyadmin里面看,只能顯示其中一小部份內容,面對10幾w的數(shù)據行,想要一個個找出被刪表的數(shù)據,太難了。
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:
* 將二進制日志導出的文件中相應表的操作記錄提出出來
* @author: 集成顯卡 <a href="mailto:
[email protected]">
[email protected]</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語句,因為有一些舊服務器的數(shù)據
* 所以要先執(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語句后面都要加 ; ,因為原來沒有,不加的話,在導入到數(shù)據庫時,出錯
*/
}
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");
}
}