通过 MySQL 二进制日志恢复删除的记录

删除 MySQL 表中的数据

mysql> use sbtest;
mysql> select count(*) from sbtest1;
+----------+
| count(*) |
+----------+
|     1000 |
+----------+
1 row in set (0.00 sec)

mysql> delete from sbtest1;
Query OK, 1000 rows affected (0.21 sec)

mysql> select count(*) from sbtest1;
+----------+
| count(*) |
+----------+
|        0 |
+----------+
1 row in set (0.00 sec)

确认时间点和当前二进制日志文件,从二进制日志中读取操作记录

mysqlbinlog --start-datetime="2018-09-27 15:55:00" --stop-datetime="2018-09-27 15:00:00" --base64-output=decode-rows --result-file=result.sql -v /var/lib/mysql/binlog.000022

其中的一条记录

去除不相关的内容

grep -A 5 "DELETE FROM \`sbtest\`.\`sbtest1\`" result.sql > 1.txt


提取数据

grep "=" 1.txt > 2.txt
sed -i ‘s/###   //g‘ 2.txt 


使用以下脚本生成 INSERT 语句

[[email protected] tmp]# cat r2.sh
#!/bin/bash
vs=""
while read line
do
    n=`echo $line | awk -NF "=" ‘{print $1}‘`
    v=`echo $line | awk -NF "=" ‘{print $2}‘`
    if [ "$n" = "@1" ]; then
        vs="INSERT INTO \`sbtest\`.\`sbtest1\` VALUES("$v
    elif [ "$n" = "@2" ]; then
        vs=$vs" , "$v
    elif [ "$n" = "@3" ]; then
        vs=$vs" , "$v
    elif [ "$n" = "@4" ]; then
        vs=$vs" , "$v");"
        echo $vs >> 3.txt
    fi
done < 2.txt
[[email protected] tmp]# sh r2.sh 


将数据导入到 MySQL 表中

[[email protected] tmp]# mysql < 3.txt
mysql> select count(*) from sbtest1;
+----------+
| count(*) |
+----------+
|     1000 |
+----------+
1 row in set (0.00 sec)

原文地址:http://blog.51cto.com/linux10000/2286654

时间: 2024-10-09 01:52:51

通过 MySQL 二进制日志恢复删除的记录的相关文章

MySQl Study学习之--MySQl二进制日志管理

MySQl Study学习之--MySQl二进制日志管理 MySQL二进制日志(Binary Log):   a.它包含的内容及作用如下:    包含了所有更新了数据或者已经潜在更新了数据(比如没有匹配任何行的一个DELETE)    包含关于每个更新数据库(DML)的语句的执行时间信息    不包含没有修改任何数据的语句,如果需要启用该选项,需要开启通用日志功能    主要目的是尽可能的将数据库恢复到数据库故障点,因为二进制日志包含备份后进行的所有更新    用于在主复制服务器上记录所有将发送

mysql二进制日志

mysql二进制日志称为binlog,记录了数据库修改数据的操作,可以用作数据恢复. binlog有三种记录方式 1.statement 记录修改数据的原始sql,IO量较小.sql中存在使用user()等依赖运行环境的函数时,可能导致数据恢复不正确. 2.row 记录每行数据的修改动作,IO较大,准确性最高,生产环境推荐使用这种模式. 3.mixed 上述两种模式混合使用. binlog参数设置 1.log_bin 只读参数,只能在my.ini(my.cnf)中设置,log_bin的值为二进制

MySQL二进制日志(binary log)总结

本文出处:http://www.cnblogs.com/wy123/p/7182356.html (保留出处并非什么原创作品权利,本人拙作还远远达不到,仅仅是为了链接到原文,因为后续对可能存在的一些错误进行修正或补充,无他) 今天无意中发现了一个云栖社区举行的MySQL“第一季:挑战玄惭之 慢SQL性能优化赛”,在测试服务器上执行其测试脚本写入数据的时候报错提示如下,Multi-statement transaction required more than 'max_binlog_cache_

Mysql学习之--Mysql二进制日志管理

Mysql学习之--Mysql二进制日志管理 简介:     MySQL的二进制日志可以说或是MySQL最重要的日志了,它记录了所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是失误安全型的.      MySQL的二进制日志的作用是显而易见的,可以方便的备份这些日志以便做数据恢复,也可以作为主从复制的同步文件,然而二进制日志的大小可能会根据不同的需求而存在麻烦,所以让日志回滚是必须的,当然MySQL已经为我们提供了二进制回滚的功

MySQL二进制日志总结

二进制日志简单介绍 MySQL的二进制日志(binary log)是一个二进制文件,主要用于记录修改数据或有可能引起数据变更的MySQL语句.二进制日志(binary log)中记录了对MySQL数据库执行更改的所有操作,并且记录了语句发生时间.执行时长.操作数据等其它额外信息,但是它不记录SELECT.SHOW等那些不修改数据的SQL语句.二进制日志(binary log)主要用于数据库恢复和主从复制,以及审计(audit)操作. 官方文档关于二进制日志(binary log)的介绍如下: T

关系型数据库之Mysql二进制日志管理(四)

MySQL二进制日志(Binary Log)1.它包含的内容及作用如下:包含了所有更新了数据或者已经潜在更新了数据(比如没有匹配任何行的一个DELETE)包含关于每个更新数据库(DML)的语句的执行时间信息不包含没有修改任何数据的语句,如果需要启用该选项,需要开启通用日志功能主要目的是尽可能的将数据库恢复到数据库故障点,因为二进制日志包含备份后进行的所有更新用于在主复制服务器上记录所有将发送给从服务器的语句启用该选项数据库性能降低1%,但保障数据库完整性,对于重要数据库值得以性能换完整.有些类似

mysql二进制日志。

mysql二进制日志: 命令行参数: --log-bin[=file_name]   文件名 --log-bin-index[=file] 文件索引 --max_binlog_size     单个文件大小 --binlog-do-db=db_name 对那些db记录.只对指定数据库进行记录 --binlog-ignore-db=db_name 忽略那些db.只忽略指定数据库,其他数据库记录 系统变量: log_bin binlog_cache_size max_binlog_cache_siz

MySQL二进制日志功能介绍

二进制日志记录所有更新数据的SQL语句,其中也包含可能更新数据的SQL语句,例如DELETE语句执行过程中无匹配的行.二进制日志中还包含了与执行SQL语句相关的内容,例如SQL语句执行的时间.错误代码等.  二进制日志功能介绍 MySQL中的二进制日志主要有两个功能:数据恢复和数据复制. 数据恢复--MySQL本身具备数据备份和恢复功能.例如我们可以每天午夜12:00进行数据备份.但是,此类备份功能并不是对数据库的实时备份,如果数据库在下午17:00出现故障无法恢复,那么从前一天午夜12:00到

mysql二进制日志的使用

mysql二进制日志也就是一些mysql命令操作的记录 删除二进制日志信息: 二进制日志会记录大量的信息(其中包含一些无用的信息).如果很长时间不清理二进制日志,将会浪费很多的磁盘空间.但是,删除之后可能导致数据库崩溃时无法进行恢复,所以若要删除二进制日志首先将其和数据库备份一份,其中也只能删除备份前的二进制日志,新产生的日志信息不可删(可以做即时点还原).也不可在关闭mysql服务器之后直接删除因为这样可能会给数据库带来错误的.若非要删除二进制日志需要做如下操作:导出备份数据库和二进制日志文件