`
stjauns
  • 浏览: 91116 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

从MYSQL的binlog恢复指定的SQL语句,解决中文乱码问题。

    博客分类:
  • JAVA
阅读更多
系统错误导致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!");
	}

}
分享到:
评论

相关推荐

    DU-MySQL-Search-Win-V6.3

    mysql默认自动循环删老旧的binlog,在某些场景又需要老的binlog重做事务,此功能从磁盘扇区搜索mysql5/8版本binlog碎片,并支持binlog碎片重新整理为标准mysql-bin.00xxxx文件,并支持将binlog解析为sql语句。...

    详解mysql数据库中文乱码问题

    当向 MySQL 数据库插入一条带有中文的数据形如 insert into employee values(null,'张三','female','1995-10-08','2015-11-12','Sales',2000,'是个好员工!'); 出现乱码时,可以使用语句 show variables like '...

    2017最新老男孩MySQL高级专业DBA实战课程全套【清晰不加密】,看完教程月入40万没毛病

    22-利用explain查看sql语句的执行计划.avi 23-DML之修改表中的记录实战.avi 24-小试牛刀初步增量恢复MySQL数据实战.avi 25-某企业运维全套面试题解答.avi 26-DML之修改表及企业严重故障案例解决实战.avi 27-删除表中...

    MySQL 备份和恢复

    3. `--default-character-set=charset`:指定导出数据的字符集,避免导入时出现乱码问题。 4. `--disable-keys`:导出前禁用索引,提高插入速度,仅适用于MyISAM表。 5. `--extended-insert = true|false`:默认启用...

    UNIX下MySQL 备份和恢复

    mysqldump是最常用的备份工具,它以SQL语句的形式导出数据,支持跨版本的兼容性。以下是一些重要的mysqldump参数: 1. `--compatible=name`:此参数用于指定与特定数据库或旧版MySQL服务器的兼容性。例如,可以设置...

    MySQL存储数据乱码的问题解析

    MySQL存储数据乱码的问题解析,通常涉及到字符集配置和数据传输过程中的编码转换。字符集在MySQL中扮演着至关重要的...通过深入理解MySQL的字符集机制,可以有效地防止和解决中文乱码问题,保证数据的完整性和可读性。

    MySQL备份与恢复(PDF版)借鉴.pdf

    3. `--default-character-set=charset`:指定导出数据的字符集,避免导入时出现乱码问题。 4. `--disable-keys`:在INSERT语句前后添加禁用和启用索引的指令,加快插入速度,仅适用于MyISAM表。 5. `--extended-...

    mysql运维基础知识面试问答题.pdf

    优化SQL语句可从减少数据量、减少资源消耗、合并查询、优化数据结构等方面入手。 中文数据乱码原理及防止: 中文乱码通常是字符集不一致造成的。防止乱码的措施包括统一数据库、表、列的字符集为UTF-8,以及确保...

    MySQL高级优化_整理.docx

    定期监控MySQL的性能指标,如QPS(每秒查询次数)、响应时间、CPU和内存使用率等,及时发现并解决问题。 8. **MySQL配置文件**: 主要的配置文件是my.cnf,在Linux系统中通常位于/etc/my.cnf。配置文件中可以设定...

    MySQL读取Binlog日志常见的3种错误

    MySQL的二进制日志(Binlog)是数据库恢复和主从复制的重要组成部分,记录了所有改变数据库状态的语句。然而,在实际操作中,我们可能会遇到一些错误,本篇文章将详细探讨三种常见的MySQL读取Binlog日志时遇到的问题...

    MySQL备份与恢复(PDF版).pdf

    - `--default-character-set=charset`:指定导出数据的字符集,防止乱码。 - `--disable-keys`:在INSERT语句前后添加禁用和启用索引的语句,提高插入速度(仅适用于MyISAM表)。 - `--extended-insert= true|...

    mysql面试题.docx

    5. **Binlog工作模式**:有ROW、STATEMENT和MIXED三种,ROW记录每个更改的行级变化,STATEMENT记录整个SQL语句,MIXED根据情况自动选择。企业选择时应考虑数据一致性和性能。 6. **监控主从复制故障**:可使用`SHOW...

    linux运维必会Mysql企业面试题.docx

    - **MySQL+Proxy**:通过MySQL Proxy作为中间件,根据SQL语句类型自动路由到主库或从库。 - **Amoeba**:一种分布式MySQL中间件,可以将请求分发到多个从库,支持水平扩展。 3. **读写分离实践**: - **设置read...

    当mysqlbinlog版本与mysql不一致时可能导致出哪些问题

    例如,某些binlog事件格式、新的SQL语句或者安全特性。如果`mysqlbinlog`不能理解这些特性,可能会导致解析错误或数据恢复失败。 4. **性能影响**: 不匹配的版本还可能导致解析速度变慢,因为旧版本的工具可能...

    最新mysql面试题整理大厂必备,你能答对几个?

    3. **解决中文乱码**:设置字符集,如在配置文件中设置`character-set-server=utf8`,并确保客户端和表的字符集一致。 4. **B+树与B树、Hash、红黑树或二叉树**:InnoDB 使用B+树作为索引结构,因为它在磁盘存储和...

    MySQL常用面试题(附答案)

    17. **解决中文乱码**: - 设置正确的字符集,如 `CHARACTER SET utf8`. 18. **InnoDB 使用 B+ 树**: - B+ 树更适合范围查询,且其叶子节点包含指针,便于遍历。 19. **死锁处理**: - InnoDB 通过检测并回滚...

Global site tag (gtag.js) - Google Analytics