mysql事务日志恢复SQL mysql数据库日志恢复_sql语句

本发明涉及一种mysql数据恢复方法,尤其涉及一种基于事务日志的mysql数据恢复方法。

背景技术:

:在对mysql数据库进行日常操作的过程中,总是无法避免会产生各种误删数据,误改数据等操作。这个时候就需要进行数据恢复,而且一般集中在某1个或几个表,而不是全部的表。当操作人员反馈过来时,数据已经提交或是运行了一段时间,业务已经报障,发现部分数据已经丢失。操作人员会将相关操作反馈给数据库管理人员,由数据库管理人员进行数据恢复,然后恢复业务运行,业务影响时长等于数据恢复时长。现有通用的处理方法是:一、利用已有的mysql数据库全备和事务日志binlog文件进行时间点数据恢复,然后将已经恢复的数据和误操作后的数据进行比对,逐步进行数据恢复,如图1所示。具体步骤如下:1、从已经存在的mysql数据库全备中进行数据库全库恢复,一般情况下恢复到测试环境时的数据;2、在测试环境数据的基础上根据时间点逐步追加binlog文件,逐步重复追加binlog文件;3、追加binlog文件的同时将恢复的数据与和误操作后的数据进行比对,检查数据是否恢复到误操作的前一步,如果未恢复继续追加binlog文件,如果已经恢复,则停止追加binlog文件;4、将已经恢复的数据导出,然后导入到对应的表中,实现数据恢复。二、对于承载核心数据的mysql数据库,可能会规划一个从节点延时主节点一定的时长,利用这个从节点数据同步的延时,进行数据恢复,如图2所示。具体步骤如下:1、在mysql数据库规划建设阶段将数据误操作列入其中,规划一个延时从节点3,利用其与主节点1的数据同步时延进行数据恢复。2、规划一个或多个实时同步节点进行mysql数据库高可用切换。3、当发现数据误操作时延小于延时从节点2数据同步时延,直接停止延时从节点3的数据同步进程,然后将数据导出,并导入主节点1进行数据恢复。此种情况下数据恢复对业务影响最小,速度快。如果发现数据丢失时长大于数据同步延时时长,方法二失去效用,还需要利用方法一进行数据恢复。现有处理方法存在如下缺点:1、数据恢复时间长。一般情况下mysql数据库备份,都是计划在业务闲时操作,如凌晨3点。而发生数据误操作一般情况下都是白天正常上班时间(如9点-18点)。数据库的备份时间点与发生误操作时间点之间的时间差,至少都有6个小时间隔时长,最长可能会达到15小时间隔时长或以上。先从数据库的备份中恢复数据,然后再追加对应时长的binlog文件,完成数据恢复。一般情况完成整个数据恢复过程,至少需要4小时或以上。2、耗费资源多。对于核心的mysql数据库。为了尽可能快速的恢复误操作引起的业务影响,规划一个延时从节点。从而利用主节点数据与延时从节点数据同步时延差,进行数据恢复。参考这种数据恢复方法,需要多加1个延时从节点,需要配置与主节点资源相同的1台设备。相对耗用更多的资源。3、灵活性较差。现有2种数据恢复技术方案中,利用延时从节点进行数据恢复,虽然灵活性一定程度上有保证,但是前提条件是发现数据丢失的时长小于数据同步延时时长,否则这个延迟从节点就失去其效用。还得从mysql数据库备份中进行数据恢复。数据库的备份一般都是全库备份,因此恢复数据也是全库恢复,而误操作的表仅是某1个或几个,为了恢复这少量的表,而进行全库恢复,耗时多,消耗资源多。不能有针对性的进行表数据恢复,灵活性较差。技术实现要素:本发明要解决的技术问题是提供一种基于事务日志的mysql数据恢复方法,解决上述问题。本发明为解决上述技术问题而采用的技术方案是提供一种基于事务日志的mysql数据恢复方法,包括如下步骤:s1:确认误操作的时间点和误操作的数据表;从mysql数据库中获取事务日志binlog文件;s2:获取相关的数据参数写入配置文件的数据恢复参数表中;s3:设置数据恢复规则表,并将数据恢复规则表存入配置文件;s4:读取配置文件,根据数据恢复参数表中的参数,参照数据恢复规则表生成数据恢复sql语句;s5:mysql数据库执行数据恢复sql语句完成数据恢复。进一步的,所述步骤s2具体包括:s21:根据步骤s1中的误操作的时间点设置数据恢复开始时间和数据恢复结束时间;s22:根据数据恢复开始时间和数据恢复结束时间,从事务日志binlog文件中获取数据恢复时间段的事务日志binlog文件;s23:根据步骤s1中确认的误操作的数据表,确认需要恢复的数据表的表名和表结构,并确认误操作的数据表对应的数据库节点;s24:设定数据恢复结果文件存储目录;s25:将数据恢复开始时间、数据恢复结束时间、数据恢复时间段的事务日志binlog文件、数据库节点、数据恢复结果文件存储目录以及误操作的数据表的表名和表结构的信息存入数据恢复参数表。进一步的,所述步骤s4具体包括:s41:确认在数据恢复时间段内,数据库节点生成了数据;s42:读取数据恢复时间段的事务日志binlog文件,得到使数据库节点生成数据的类sql的dml操作语句;s43:将类sql的dml操作语句结合需要恢复的数据表的表结构转换为标准的操作sql语句;s44:将标准的操作sql语句通过数据恢复规则表生成数据恢复sql语句;s45:将生成的数据恢复sql语句存储到数据恢复结果文件存储目录。进一步的,所述步骤s4还包括将转换的标准操作sql语句和生成的数据恢复sql语句进行比对和校验,确认生成的数据恢复sql语句正确。进一步的,所述数据恢复规则表根据反向sql操作制定,具体包括默认规则和特别规则,默认规则包括:操作sql语句为insert,数据恢复sql语句则转换为delete;操作sql语句为delete,数据恢复sql语句则转换为insert;操作sql语句为update,数据恢复sql语句则转换为反向的update;特别规则包括:操作sql语句为insert,参数值为none,则不生成数据恢复sql语句;操作sql语句为update,数据恢复sql语句则转换为insert;操作sql语句为update,数据恢复sql语句则转换delete+insert,即对每一条数据先生成delete操作,再生成insert操作;操作sql语句为update,参数值为none,则不生成数据恢复sql语句;操作sql语句为delete,参数值为none,则不生成数据恢复sql语句。本发明对比现有技术有如下的有益效果:本发明提供的基于事务日志的mysql数据恢复方法,将相关参数写入配置文件中,然后从配置文件中读取相关参数运行,避免连接数据库进行相关参数获取,离线于数据库独立进行数据恢复,减少对业务的影响,稳定性强,安全性高;结合误操作的时间点和表,从binlog事务日志中直接生成数据恢复sql语句,不需要进行数据库的备份恢复和追加binlog,耗时少,速度快,不需要增加额外的资源,成本低;针对数据表进行恢复,具有足够的灵活性;数据恢复流程简便且易于执行,节约了开发成本且使用简单方便。附图说明图1为现有的第一种数据恢复方法流程图;图2为现有的第二种数据恢复方法结构示意图;图3为本发明实施例中基于事务日志的mysql数据恢复方法流程图。具体实施方式下面结合附图和实施例对本发明作进一步的描述。图3为本发明实施例中基于事务日志的mysql数据恢复方法流程图。请参见图3,本发明实施例的基于事务日志的mysql数据恢复方法,包括如下步骤:1)首先根据误操作的时间点和表,将数据恢复参数和数据恢复规则写入配置文件中,具体见表1数据恢复参数表和表2数据恢复参数表。2)从配置文件中读取相关参数,检查对应时间段,数据库结点(server_id)是否生成数据,如果未生成数据,则提示对应时间段未生成数据,退出程序运行。3)如果对应时间段,数据库结点(server_id)生成数据,则提示是否生成标准操作sql语句,如果输入否,则结束程序运行。4)如果输入是,则读取相关参数,按表生成标准操作的sql语句,并写入到输出目录文件。5)接着继续提示是否生成数据恢复sql语句,如果输入否,则结束程序运行。6)如果输入是,读取相关参数,按表生成数据恢复sql语句,并写入到输出目录文件,结束程序运行。配置文件的配置参数包括数据恢复参数和数据恢复规则,数据恢复参数是指恢复数据需要的相关参数具体见表1数据恢复参数表。参数名参数值事务日志文件需要恢复数据对应时间段的binlog事务日志文件输出目录数据恢复的结果文件存储空间server_id操作数据的数据库节点,mysql数据库内部标识开始时间需要恢复数据的开始时间结束时间需要恢复数据结束时间,如果保留为空,则表示到当前事务日志结束时间表名需要恢复数据的表名表结构需要恢复数据表的表结构,按照数据库存储顺序使用“|”分隔表1数据恢复参数表从binlog事务日志中得到的生成数据的语句是类sql的dml操作语句,需要结合表结构,将其转换为标准的操作sql语句。数据恢复规则,是将转换后的标准操作sql语句,按照数据恢复规则进行处理,达到数据恢复的目的。默认情况下为反向sql操作,达到数据恢复目的。数据恢复规则具体见表2数据恢复规则表。表2数据恢复规则表由于数据库数据恢复的多样化和用途不定,及尽可能减少对业务的影响,特地将相关参数写入配置文件中,然后从配置文件中读取相关参数运行,这样就可以不用连接数据库进行相关参数获取,离线于数据库独立进行数据恢复。为了使本数据恢复程序适用更多的用途,特别首先生成标准操作sql语句,然后再生成数据恢复sql语句,优势如下:可以利用生成标准操作sql语句和数据恢复sql语句进行比对和校验,提高数据恢复的准确度,避免二次数据损坏。标准操作sql语句,可以用于mysql高可用切换后已经运行了一段时间,才发现数据丢失。此时当前的主节点已经生成了新的业务数据,不能够将binlog事务日志中的数据直接运用于当前主节点,否则会进一步的破坏数据,可以使用生成的标准操作sql语句,按照业务规则进行数据补齐。当数据库数据产生异常时,而未能够分析出原因,此时可以利用生成的标准操作的sql语句对相关异常数据进行分析,可以实现审计的部分功能。综上所述,本发明提供的基于事务日志的mysql数据恢复方法,将相关参数写入配置文件中,然后从配置文件中读取相关参数运行,避免连接数据库进行相关参数获取,离线于数据库独立进行数据恢复,减少对业务的影响,稳定性强,安全性高;结合误操作的时间点和表,从binlog事务日志中直接生成数据恢复sql语句,不需要进行数据库的备份恢复和追加binlog,耗时少,速度快,不需要增加额外的资源,成本低;针对数据表进行恢复,具有足够的灵活性;数据恢复流程简便且易于执行,节约了开发成本且使用简单方便。虽然本发明已以较佳实施例揭示如上,然其并非用以限定本发明,任何本领域技术人员,在不脱离本发明的精神和范围内,当可作些许的修改和完善,因此本发明的保护范围当以权利要求书所界定的为准。