从MYSQL的binlog恢复指定的SQL语句,解决中文乱码问题。
系统错误导致3天中的部分数据被错误覆盖,只能从MYSQL的binlog中恢复数据。
1、使用mysqlbinlog工具将binlog文件转换为sql文件:
mysqlbinlog sd-bin.000040 > a.sql
mysqlbinlog sd-bin.000041 >> a.sql
2、遍历a.sql的所有语句:
import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;public class SQLparser {/** * @param args * @throws IOException */public static void main(String[] args) throws IOException {if (args == null || args.length != 1) {System.out.println("error on args");return;}File file = new File(args[0]);if (!file.isFile()) {System.out.println("error arg[0] not a file");return;}System.out.println(file.getName() + "BEGIN!");BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File("d:\\parsed.sql")), "utf-8"));BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file), "utf-8"/* 指定源文件的字符集编码 */));String line = br.readLine();while (line != null) {if (line.contains(", c_dzd.voucher='"/* 匹配需要留下的SQL片段 */)) {System.out.println(line);bw.append(line + ";\n"/* 追加分号和换行 */);}line = br.readLine();}br.close();bw.close();System.out.println(file.getName() + "OK!");}}