系统错误导致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!");
}
}
分享到:
相关推荐
mysql默认自动循环删老旧的binlog,在某些场景又需要老的binlog重做事务,此功能从磁盘扇区搜索mysql5/8版本binlog碎片,并支持binlog碎片重新整理为标准mysql-bin.00xxxx文件,并支持将binlog解析为sql语句。...
当向 MySQL 数据库插入一条带有中文的数据形如 insert into employee values(null,'张三','female','1995-10-08','2015-11-12','Sales',2000,'是个好员工!'); 出现乱码时,可以使用语句 show variables like '...
22-利用explain查看sql语句的执行计划.avi 23-DML之修改表中的记录实战.avi 24-小试牛刀初步增量恢复MySQL数据实战.avi 25-某企业运维全套面试题解答.avi 26-DML之修改表及企业严重故障案例解决实战.avi 27-删除表中...
3. `--default-character-set=charset`:指定导出数据的字符集,避免导入时出现乱码问题。 4. `--disable-keys`:导出前禁用索引,提高插入速度,仅适用于MyISAM表。 5. `--extended-insert = true|false`:默认启用...
mysqldump是最常用的备份工具,它以SQL语句的形式导出数据,支持跨版本的兼容性。以下是一些重要的mysqldump参数: 1. `--compatible=name`:此参数用于指定与特定数据库或旧版MySQL服务器的兼容性。例如,可以设置...
MySQL存储数据乱码的问题解析,通常涉及到字符集配置和数据传输过程中的编码转换。字符集在MySQL中扮演着至关重要的...通过深入理解MySQL的字符集机制,可以有效地防止和解决中文乱码问题,保证数据的完整性和可读性。
3. `--default-character-set=charset`:指定导出数据的字符集,避免导入时出现乱码问题。 4. `--disable-keys`:在INSERT语句前后添加禁用和启用索引的指令,加快插入速度,仅适用于MyISAM表。 5. `--extended-...
优化SQL语句可从减少数据量、减少资源消耗、合并查询、优化数据结构等方面入手。 中文数据乱码原理及防止: 中文乱码通常是字符集不一致造成的。防止乱码的措施包括统一数据库、表、列的字符集为UTF-8,以及确保...
定期监控MySQL的性能指标,如QPS(每秒查询次数)、响应时间、CPU和内存使用率等,及时发现并解决问题。 8. **MySQL配置文件**: 主要的配置文件是my.cnf,在Linux系统中通常位于/etc/my.cnf。配置文件中可以设定...
MySQL的二进制日志(Binlog)是数据库恢复和主从复制的重要组成部分,记录了所有改变数据库状态的语句。然而,在实际操作中,我们可能会遇到一些错误,本篇文章将详细探讨三种常见的MySQL读取Binlog日志时遇到的问题...
- `--default-character-set=charset`:指定导出数据的字符集,防止乱码。 - `--disable-keys`:在INSERT语句前后添加禁用和启用索引的语句,提高插入速度(仅适用于MyISAM表)。 - `--extended-insert= true|...
5. **Binlog工作模式**:有ROW、STATEMENT和MIXED三种,ROW记录每个更改的行级变化,STATEMENT记录整个SQL语句,MIXED根据情况自动选择。企业选择时应考虑数据一致性和性能。 6. **监控主从复制故障**:可使用`SHOW...
- **MySQL+Proxy**:通过MySQL Proxy作为中间件,根据SQL语句类型自动路由到主库或从库。 - **Amoeba**:一种分布式MySQL中间件,可以将请求分发到多个从库,支持水平扩展。 3. **读写分离实践**: - **设置read...
例如,某些binlog事件格式、新的SQL语句或者安全特性。如果`mysqlbinlog`不能理解这些特性,可能会导致解析错误或数据恢复失败。 4. **性能影响**: 不匹配的版本还可能导致解析速度变慢,因为旧版本的工具可能...
3. **解决中文乱码**:设置字符集,如在配置文件中设置`character-set-server=utf8`,并确保客户端和表的字符集一致。 4. **B+树与B树、Hash、红黑树或二叉树**:InnoDB 使用B+树作为索引结构,因为它在磁盘存储和...
17. **解决中文乱码**: - 设置正确的字符集,如 `CHARACTER SET utf8`. 18. **InnoDB 使用 B+ 树**: - B+ 树更适合范围查询,且其叶子节点包含指针,便于遍历。 19. **死锁处理**: - InnoDB 通过检测并回滚...