MySQL通过binlog日志回滚数据

一、数据库在进行数据更改操作时,会出现数据误操作导致数据异常的情况,所以数据安全是重中至重,对于数据库服务,必须开启binlog日志服务,保证数据的安全,可逆回滚。
二进制日志的格式有三种形式分别为ROW、Statement以及MiXED
1、STATMENT模式:基于SQL语句的复制(statement-based replication, SBR),每一条会修改数据的sql语句会记录到binlog中。

优点:不需要记录每一条SQL语句与每行的数据变化,这样子binlog的日志也会比较少,减少了磁盘IO,提高性能。

缺点:在某些情况下会导致master-slave中的数据不一致(如sleep()函数, last_insert_id(),以及user-defined functions(udf)等会出现问题)

2、基于行的复制(row-based replication, RBR):不记录每一条SQL语句的上下文信息,仅需记录哪条数据被修改了,修改成了什么样子了。

优点:不会出现某些特定情况下的存储过程、或function、或trigger的调用和触发无法被正确复制的问题。

缺点:会产生大量的日志,尤其是alter table的时候会让日志暴涨。

3、混合模式复制(mixed-based replication, MBR):以上两种模式的混合使用,一般的复制使用STATEMENT模式保存binlog,对于STATEMENT模式无法复制的操作使用ROW模式保存binlog,MySQL会根据执行的SQL语句选择日志保存方式。
这里我这都我的数据库日志使用ROW格式。

登录数据查看数据库的数据信息:

核实相关的binlog日志的报错路径以及日志是否开启。show variables like "log_bin%";

核实最新的binlog日志信息:show master logs; show binary logs; show master status;

     二、下面进行相关的数据恢复实践:

创建测试数据库:

创建数据表:相关的数据是下载网络资源的数据。

将数据删除:

三、通过binlog日志核实删除以及创建数据的时间点或者pos点。
我这里演示通过pos点进行数据恢复。
通过mysqlbinlog 命令核实最近的binlog日志名称进行日志查看。核实具体的时间节点。


确认时间点后,进行数据回滚,相关命令还是通过mysqlbinlog进行数据回滚操作。
mysqlbinlog --no-defaults --start-position="239" --stop-position="736" /var/lib/mysql/ON.000015 | mysql -uroot -p
参数说明,--start-position #开始的pos时间点。
--stop-position #结束的pos时间
如果是通过日期时间回滚的命令如下:

     mysqlbinlog --start-datetime ‘2019-07-02 21:42:36‘ --stop-datetime ‘2019-07-02  21:57:42‘ /var/lib/mysql/ON.000013 | mysql -uroot -p

执行回滚后会出现如下的信息,回车确认,我这里数据比较少,回滚时间较快。

再次核实相关的数据信息。

注:mysqlbinlog相关的命令参数可以通过mysqlbinlog --help 核实查看。

原文地址:https://blog.51cto.com/zhanx/2416449

时间: 2024-11-09 00:49:18

MySQL通过binlog日志回滚数据的相关文章

mysql通过binlog日志来恢复数据

简介 在生产的过程中有这么一个业务场景:比如我在2016-11-19 09:30:00 通过mysqldump的方式备份了数据库,但是在2016-11-19 10:30:00的时候数据库崩溃了,如果通过我们的备份文件来恢复,也只能恢复到 2016-11-19 09:30:00 这个时间点,而9.30分到10:30分这一个小时的数据恢复不了,这时候我们可以通过mysql的binlog日志来恢复没有备份到的这一小时的数据. 1.开启mysql的binlog日志(默认情况下没有开启) #vim /et

Mysql之binlog日志说明及利用binlog日志恢复数据操作记录

众所周知,binlog日志对于mysql数据库来说是十分重要的.在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全备份+binlog日志恢复增量数据部分),化险为夷! 废话不多说,下面是梳理的binlog日志操作解说: 一.初步了解binlogMySQL的二进制日志binlog可以说是MySQL最重要的日志,它记录了所有的DDL和DML语句(除了数据查询语句select),以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的. DDL-

2016-11-05实战-日志回滚

日志回滚原理: 当日志达到某个特定的大小,我们将日志分类,之前的日志保留一个备份,再产生的日志创建一个同名的文件保存新的日志. 查看/etc/logrotate.conf 单独配置 实战回滚(在ssh日志的基础上) 1.编辑/etc/logrotate.conf 说明: /var/log/sshd.log   #指定日志文件    monthly               # 每月执行一次日志回滚操作    minsize 10M         #文件超过1M进行回滚 2.使配置生效方法 第

MySQL抑制binlog日志中的BINLOG部分

MySQL通过binlog来记录整个数据的变更过程,因此我们只要有MySQL的binlog日志即可完整的还原数据库.MySQL binlog日志记录有3种不同的方式,即:STATEMENT,MIXED,ROW.对于不同的日志模式,生成的binlog有不同的记录方式.对于MIXED(部分SQL语句)和ROW模式是以base-64方式记录,会以BINLOG开头,是一段伪SQL,我们可以用使用base64-output参数来抑制其显示.本文对此给出了描述及演示. 有关mysqlbinlog的用法,请参

如何通过Mysql的二进制日志恢复数据库数据

经常有网站管理员因为各种原因和操作,导致网站数据误删,而且又没有做网站备份,结果不知所措,甚至给网站运营和盈利带来负面影响.所以本文我们将和大家一起分享学习下如何通过Mysql的二机制日志(binlog)来恢复数据. 系统环境: 操作系统:CentOS 6.5 X64  (虚拟机): WEB服务:PHP+Mysql+apache: 网站:为方便,直接在本地用蝉知系统搭建一个DEMO站点: 操作步骤: 1.开启binlog功能及基本操作: 2.往站点添加数据: 3.刷新binlog日志: 4.删除

06 : mysql 的 binlog 日志 和slow慢日志 详解

mysql 的 binlog 日志 和slow慢日志 详解 mysql一般常用的日志有三种:1:error错误日志2: binlog日志3:slow日志 下面将详细解释这三种日志: 1.错误日志记录MySQL启动或工作过程中,数据库状态信息,默认就是开启的,数据路径下$hostname.err.也可以指定错误路径:log_error=/var/log/mysql3306.log 2.二进制binlog日志(1)他记录了什么?记录了所有的数据库修改类的命令:DDLDCLDML (2)二进制日志记录

Linux 日志回滚

"回滚" 是一种概念,例如保留最近一个星期的日志记录,就把前7天的抹杀掉,永远只保留你设置的记录规则. 系统默认就有日志回滚,配置文件在这里 手动配置一个yum日志回滚规则 原文地址:http://blog.51cto.com/kangxi/2114332

mysql清理binlog日志

mysql的binlog日志过多过大,清理过程. 1.查看binlog日志 mysql> show binary logs; +------------------+-----------+ | Log_name | File_size | +------------------+-----------+ | mysql-bin.000001 | 13255920 | | mysql-bin.000002 | 143716 | | mysql-bin.000003 | 524288119 | |

mysql将bin-log日志文件转为sql文件

查看mysqlbinlog版本 mysqlbinlog -V [--version] 查看binlog日志开启状态 show variables like '%log_bin%'; mysql打开bin-log日志后,mysql数据库的非查询操作会将记录保存到bin-log文件中.一般bin-log日志文件不能打开查看的,需要用到mysql的工具进行.假设/mysql/data/目录中存放着二进制文件mysql-bin.000011.需要将日志文件mysql-bin.000011中关于数据库ti