从MYSQL的binlog恢复指定的SQL语句,解决中文乱码问题。
程序员文章站
2022-07-08 10:10:53
...
系统错误导致3天中的部分数据被错误覆盖,只能从MYSQL的binlog中恢复数据。
1、使用mysqlbinlog工具将binlog文件转换为sql文件:
mysqlbinlog sd-bin.000040 > a.sql
mysqlbinlog sd-bin.000041 >> a.sql
2、遍历a.sql的所有语句:
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!"); } }
上一篇: k8s如何配置nginx请求头大小