清理日志的方法及装置、存储介质、电子装置与流程

文档序号:17442111发布日期:2019-04-17 04:54阅读:203来源:国知局
清理日志的方法及装置、存储介质、电子装置与流程

本发明涉及计算机领域,具体而言,涉及一种清理日志的方法及装置、存储介质、电子装置。



背景技术:

相关技术中的postgresql是一个功能强大,开源对象关系型数据库系统,应用非常广泛。

相关技术中,postgresql在复制正常情况下可以使用官方提供参数对xlog进行删除。如:参数设置保留15天xlog,数据库会根据参数从当前时间保留15天内的xlog,大于15天的自动清除,通过读取xlog的时间戳,将时间戳在15天之前的xlog都删除。但是在复制出现停止或异常中断后,官方配置的参数无法正常清除日志时,业务繁忙的系统日志陡然增长会导致数据库磁盘空间不足引起数据库宕机。

针对相关技术中存在的上述问题,目前尚未发现有效的解决方案。



技术实现要素:

本发明实施例提供了一种清理日志的方法及装置、存储介质、电子装置。

根据本发明的一个实施例,提供了一种清理日志的方法,包括:按照预设周期触发postgresql中的清理程序;使用所述清理程序清理所述postgresql中xlog,其中,所述xlog用于记录所述postgresql中的预写式wal信息。

可选的,在按照预设周期触发postgresql中的清理程序之前,所述方法还包括:确定所述postgresql中,主数据库和备数据库之间复制停止或复制中断。

可选的,在按照预设周期触发postgresql中的清理程序之前,所述方法包括:设置所述预设周期,以及编辑所述清理程序;将所述清理程序和所述预设周期添加备份脚本到计划任务crontab。

可选的,编辑所述清理程序包括:在所述postgresql中创建任务表;在所述任务表中添加清理任务,其中,所述清理任务用于每隔所述预设周期操作一次所述任务表中的数据操纵语言dml。

可选的,使用所述清理程序清理所述postgresql中xlog包括:使用所述清理程序在所述postgresql中创建检查点;更新所述检查点的最后系统更改号lscn,使用所述检查点将所述postgresql中内存缓冲区中的xlog清理到磁盘。

可选的,使用所述检查点将所述postgresql中内存缓冲区中的xlog清理到磁盘包括:使用所述检查点,按照xlog在所述postgresql中内存缓冲区中的队列顺序将xlog清理到磁盘中;使用所述检查点,按照xlog在所述postgresql中的优先级顺序将xlog清理到磁盘中;使用所述检查点,按照xlog在所述postgresql中的属性信息将xlog清理到磁盘中,其中,所述属性信息包括以下至少之一:是否被操作、文件大小、是否包括指定内容。

可选的,在按照预设周期触发postgresql中的清理程序之前,所述方法还包括:配置所述postgresql的wal参数,其中,所述wal参数包括:wal_level、wal_sync_method、fsync=on、wal_keep_segments;在所述wal参数配置完成后,设置所述xlog的存储路径。

可选的,在按照预设周期触发postgresql中的清理程序之前,所述方法还包括以下至少之一:确定所述postgresql的可用存储空间低于第一门限值;确定所述postgresql中xlog的占用存储量高于第二门限值。

根据本发明的另一个实施例,提供了一种清理日志的装置,包括:触发模块,用于按照预设周期触发postgresql中的清理程序;清理模块,用于使用所述清理程序清理所述postgresql中xlog,其中,所述xlog用于记录所述postgresql中的预写式wal信息。

可选的,所述装置还包括:第一确定模块,用于在所述触发模块按照预设周期触发postgresql中的清理程序之前,确定所述postgresql中,主数据库和备数据库之间复制停止或复制中断。

可选的,所述装置包括:设置模块,用于在所述触发模块按照预设周期触发postgresql中的清理程序之前,设置所述预设周期,以及编辑所述清理程序;添加模块,用于将所述清理程序和所述预设周期添加备份脚本到计划任务crontab。

可选的,所述设置模块包括:创建单元,用于在所述postgresql中创建任务表;清理单元,用于在所述任务表中添加清理任务,其中,所述清理任务用于每隔所述预设周期操作一次所述任务表中的数据操纵语言dml。

可选的,所述清理模块包括:创建单元,用于使用所述清理程序在所述postgresql中创建检查点;处理单元,用于更新所述检查点的最后系统更改号lscn,使用所述检查点将所述postgresql中内存缓冲区中的xlog清理到磁盘。

可选的,所述处理单元还用于以下之一:使用所述检查点,按照xlog在所述postgresql中内存缓冲区中的队列顺序将xlog清理到磁盘中;使用所述检查点,按照xlog在所述postgresql中的优先级顺序将xlog清理到磁盘中;使用所述检查点,按照xlog在所述postgresql中的属性信息将xlog清理到磁盘中,其中,所述属性信息包括以下至少之一:是否被操作、文件大小、是否包括指定内容。

可选的,所述装置还包括:配置模块,用于在所述清理模块按照预设周期触发postgresql中的清理程序之前,配置所述postgresql的wal参数,其中,所述wal参数包括:wal_level、wal_sync_method、fsync=on、wal_keep_segments;设置模块,用于在所述wal参数配置完成后,设置所述xlog的存储路径。

可选的,所述装置还包括以下至少之一:第二确定模块,用于在所述触发模块按照预设周期触发postgresql中的清理程序之前,确定所述postgresql的可用存储空间低于第一门限值;第三确定模块,用于在所述触发模块按照预设周期触发postgresql中的清理程序之前,确定所述postgresql中xlog的占用存储量高于第二门限值。

根据本发明的又一个实施例,还提供了一种存储介质,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。

根据本发明的又一个实施例,还提供了一种电子装置,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行上述任一项方法实施例中的步骤。

通过本发明,按照预设周期触发postgresql中的清理程序来清理postgresql中xlog,通过使用预设周期来自动清理postgresql中xlog,避免了postgresql的官方参数在postgresql复制异常时不自动清理xlog而导致数据库宕机的异常,解决了相关技术中postgresql在系统异常时不能自动清理xlog的技术问题,提高了postgresql系统的稳定性和安全性。

附图说明

此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:

图1是本发明实施例的一种清理日志的服务器的硬件结构框图;

图2是根据本发明实施例的一种清理日志的方法的流程图;

图3是本发明实施例xlog的日志记录结构示意图;

图4是本发明实施例清理程序清理xlog的示意图;

图5是根据本发明实施例的清理日志的装置的结构框图。

具体实施方式

下文中将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。

需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。

实施例1

本申请实施例一所提供的方法实施例可以在服务器、计算机终端或者类似的运算装置中执行。以运行在服务器上为例,图1是本发明实施例的一种清理日志的服务器的硬件结构框图。如图1所示,服务器10可以包括一个或多个(图1中仅示出一个)处理器102(处理器102可以包括但不限于微处理器mcu或可编程逻辑器件fpga等的处理装置)和用于存储数据的存储器104,可选地,上述服务器还可以包括用于通信功能的传输设备106以及输入输出设备108。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对上述服务器的结构造成限定。例如,服务器10还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。

存储器104可用于存储计算机程序,例如,应用软件的软件程序以及模块,如本发明实施例中的一种清理日志的方法对应的计算机程序,处理器102通过运行存储在存储器104内的计算机程序,从而执行各种功能应用以及数据处理,即实现上述的方法。存储器104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器104可进一步包括相对于处理器102远程设置的存储器,这些远程存储器可以通过网络连接至服务器10。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

传输装置106用于经由一个网络接收或者发送数据。上述的网络具体实例可包括服务器10的通信供应商提供的无线网络。在一个实例中,传输装置106包括一个网络适配器(networkinterfacecontroller,简称为nic),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输装置106可以为射频(radiofrequency,简称为rf)模块,其用于通过无线方式与互联网进行通讯。

在本实施例中提供了一种清理日志的方法,图2是根据本发明实施例的一种清理日志的方法的流程图,如图2所示,该流程包括如下步骤:

步骤s202,按照预设周期触发postgresql中的清理程序;

步骤s204,使用清理程序清理postgresql中xlog,其中,xlog用于记录postgresql中的预写式((write-aheadlogging,wal)信息。

通过上述步骤,按照预设周期触发postgresql中的清理程序来清理postgresql中xlog,通过使用预设周期来自动清理postgresql中xlog,避免了postgresql的官方参数在postgresql复制异常时不自动清理xlog而导致数据库宕机的异常,解决了相关技术中postgresql在系统异常时不能自动清理xlog的技术问题,提高了postgresql系统的稳定性和安全性。

可选地,上述步骤的执行主体可以为服务器,运行或管理postgresql的设备,存储数据的存储设备等,但不限于此。

本实施例中的postgresql支持大部分结构化查询语言(structuredquerylanguage,sql)标准并且提供了许多其他现代特性:复杂查询、外键、触发器、视图、事务完整性、多版本并发控制(multi-versionconcurrencycontrol,mvcc)。同样,postgresql可以用许多方法扩展,比如,通过增加新的数据类型、函数、操作符、聚集函数、索引。免费使用、修改、和分发postgresql。本实施例中的xlog也称为pg_xlog,记录的postgresql的wal信息,也就是一些事务日志信息(transactionlog),默认单个大小16m。

图3是本发明实施例xlog的日志记录结构示意图,包括header(头部),记录1、记录2、记录3等,其中,xlogrecord记录了xlog的相关控制信息,xlog记录数据信息时,rmgrdata数据被xloginsert()函数写入,有一个或多个xlogrecdata数据结构组成,当有多个xlogrecdata结构体时有两种情况:1.源数据没有在内存上物理相邻;2.数据在多个缓冲区中被指定。

在本实施例中,在按照预设周期触发postgresql中的清理程序之前,方法还包括:确定postgresql中,主数据库和备数据库之间复制停止或复制中断。

由于postgresql在复制异常环境下,pg_xlog不会自动清理,导致存储空间激增会引起数据库宕机风险。因此,在主数据库和备数据库之间复制停止或复制中断等异常环境下,触发备用的xlog清理方案,即本实施例的日志清理方案。可以避免官方默认提供的参数在复制异常情况下不自动清除日志时出现的问题。

可选的,在按照预设周期触发postgresql中的清理程序之前,方法包括:

s11,设置预设周期,以及编辑清理程序;

在本实施例的一个可选实施方式中,编辑清理程序包括:在postgresql中创建任务表;在任务表中添加清理任务(job),其中,清理任务用于每隔预设周期操作一次任务表中的数据操纵语言dml。在预设周期为一分钟时,具体的操作流程和代码包括:

dml是sql语言中,负责对数据库对象运行数据访问工作的指令集,以insert、update、delete三种指令为核心,分别代表插入、更新与删除,是开发以数据为中心的应用程序必定会使用到的指令。

s12,将清理程序和预设周期添加备份脚本到postgresql的计划任务crontab,执行的程序代码包括:

1/*****/home/postgres/keep_rule.sh

editkeep_rule.sh

find/pgdata/pg_xlog/-cmin+80-name"00000001*"-execrm-rf{}\。

在linux上由crond来周期性的执行指令列表,执行的任务称为cronjob,多个任务就称为crontab。

开启crontab服务的流程包括:检查是否安装:crontab–l;安装:yuminstallcrontabs;查看服务状态,servicecrondstatus;开启服务,servicecrondstart。

可选的,使用清理程序清理postgresql中xlog包括:

s21,使用清理程序在postgresql中创建检查点;

s22,更新检查点的最后系统更改号(lastsystemchangenumber,lscn),使用检查点将postgresql中内存缓冲区中的xlog清理到磁盘。使用创建的检查点来执行定时插入和删除,定时周期即之前设定的预设周期,如定时周期为1分钟。

在本实施例的一个可选实施方式中,使用检查点将postgresql中内存缓冲区中的xlog清理到磁盘包括:使用检查点,按照xlog在postgresql中内存缓冲区中的队列顺序将xlog清理到磁盘中;使用检查点,按照xlog在postgresql中的优先级顺序将xlog清理到磁盘中;使用检查点,按照xlog在postgresql中的属性信息将xlog清理到磁盘中,其中,属性信息包括以下至少之一:是否被操作、文件大小、是否包括指定内容。指定内容可以是错误字段,报警内容等。

图4是本发明实施例清理程序清理xlog的示意图,postgresql包括三个事件:checkpoint,walreceiverprocess,writefsync,其中,checkpoint是一个内部事件,这个事件激活以后会触发数据库写进程(dbwr)将数据缓冲(databuffercache)中的脏数据块写出到数据文件中,即将xlog清理到磁盘;walreceiverprocess为wal信息的接收进程,接收设备产生的日志;writefsync为写同步,同步内存中所有已修改的文件数据(log)到储存设备,系统在写同步异常时,触发清理程序,自动清理内存中的xlog,避免其溢出宕机。

可选的,在按照预设周期触发postgresql中的清理程序之前,方法还包括:配置postgresql的wal参数,其中,wal参数包括:wal_level、wal_sync_method、fsync=on、wal_keep_segments;设置xlog的存储路径。配置wal参数与配置周期触发的清理程序并没有时序上的关系,可以是同时配置,也可以是在配置wal参数之后,或者是在配置wal参数之前,配置周期触发的清理程序。

在一个示例中,在配置wal参数之后,再配置清理程序(更新lscn的程序),本示例应用的完整方案包括:

步骤1:配置数据库wal的相关参数wal_level、wal_sync_method、fsync=on、wal_keep_segments;

步骤2:设置pg_xlog日志路径;

pg_xlog=/db/postgres/pg_xlog

步骤3:重启数据库使参数生效;

pg_ctlrestart

步骤4:编写更新lscn的程序,进一步包括:

步骤5:添加备份脚本到计划任务crontab。

1/*****/home/postgres/keep_rule.sh

editkeep_rule.sh

find/pgdata/pg_xlog/-cmin+80-name"00000001*"-execrm-rf{}\;

在本实施例的一个可选实施方式中,在按照预设周期触发postgresql中的清理程序之前,方法还包括以下至少之一:确定postgresql的可用存储空间低于第一门限值;确定postgresql中xlog的占用存储量高于第二门限值。可用存储空间是指内存缓冲区的可用存储空间,和xlog的占用存储量也是指内存缓冲区的占用空间,作为本实施例的触发条件,可以与上述的复制异常触发机制结合使用,也可以单独使用,如即使主数据库和备数据库之间没有出现复制停止或复制中断,也可以在postgresql的可用存储空间低于第一门限值,或者是postgresql中xlog的占用存储量高于第二门限值时,按照预设周期触发postgresql中的清理程序,并使用清理程序清理postgresql中xlog。本实施例中的第一门限值和第二门限值依总存储空间而定,可以是一个存储量,如第一门限值为1g,也可以是一个比例值,如第二门限值为xlog的占用存储量占比总存储量的比例为90%等。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。

实施例2

在本实施例中还提供了一种清理日志的装置,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。

图5是根据本发明实施例的清理日志的装置的结构框图,可以应用在服务器、终端等,如图5所示,该装置包括:

触发模块50,用于按照预设周期触发postgresql中的清理程序;

清理模块52,用于使用所述清理程序清理所述postgresql中xlog,其中,所述xlog用于记录所述postgresql中的预写式wal信息。

在本实施例的一个可选实施方式中,所述装置还包括:第一确定模块,用于在所述触发模块按照预设周期触发postgresql中的清理程序之前,确定所述postgresql中,主数据库和备数据库之间复制停止或复制中断。

可选的,所述装置还包括:设置模块,用于在所述触发模块按照预设周期触发postgresql中的清理程序之前,设置所述预设周期,以及编辑所述清理程序;添加模块,用于将所述清理程序和所述预设周期添加备份脚本到计划任务crontab。

可选的,所述设置模块包括:创建单元,用于在所述postgresql中创建任务表;清理单元,用于在所述任务表中添加清理任务,其中,所述清理任务用于每隔所述预设周期操作一次所述任务表中的数据操纵语言dml。

在本实施例的一个可选实施方式中,所述清理模块包括:创建单元,用于使用所述清理程序在所述postgresql中创建检查点;处理单元,用于更新所述检查点的最后系统更改号lscn,使用所述检查点将所述postgresql中内存缓冲区中的xlog清理到磁盘。

可选的,所述处理单元还用于:使用检查点,按照xlog在postgresql中内存缓冲区中的队列顺序将xlog清理到磁盘中;使用检查点,按照xlog在postgresql中的优先级顺序将xlog清理到磁盘中;使用检查点,按照xlog在postgresql中的属性信息将xlog清理到磁盘中,其中,属性信息包括以下至少之一:是否被操作、文件大小、是否包括指定内容。指定内容可以是错误字段,报警内容等。

可选的,所述装置还包括:配置模块,用于在所述清理模块按照预设周期触发postgresql中的清理程序之前,配置所述postgresql的wal参数,其中,所述wal参数包括:wal_level、wal_sync_method、fsync=on、wal_keep_segments;设置模块,用于设置所述xlog的存储路径。

在本实施例的一个可选实施方式中,所述装置还包括以下至少之一:第二确定模块,用于在所述触发模块按照预设周期触发postgresql中的清理程序之前,确定所述postgresql的可用存储空间低于第一门限值;第三确定模块,用于在所述触发模块按照预设周期触发postgresql中的清理程序之前,确定所述postgresql中xlog的占用存储量高于第二门限值。

需要说明的是,上述各个模块是可以通过软件或硬件来实现的,对于后者,可以通过以下方式实现,但不限于此:上述模块均位于同一处理器中;或者,上述各个模块以任意组合的形式分别位于不同的处理器中。

实施例3

本发明的实施例还提供了一种存储介质,该存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。

可选地,在本实施例中,上述存储介质可以被设置为存储用于执行以下步骤的计算机程序:

s1,按照预设周期触发postgresql中的清理程序;

s2,使用所述清理程序清理所述postgresql中xlog,其中,所述xlog用于记录所述postgresql中的预写式wal信息。

可选地,在本实施例中,上述存储介质可以包括但不限于:u盘、只读存储器(read-onlymemory,简称为rom)、随机存取存储器(randomaccessmemory,简称为ram)、移动硬盘、磁碟或者光盘等各种可以存储计算机程序的介质。

本发明的实施例还提供了一种电子装置,包括存储器和处理器,该存储器中存储有计算机程序,该处理器被设置为运行计算机程序以执行上述任一项方法实施例中的步骤。

可选地,上述电子装置还可以包括传输设备以及输入输出设备,其中,该传输设备和上述处理器连接,该输入输出设备和上述处理器连接。

可选地,在本实施例中,上述处理器可以被设置为通过计算机程序执行以下步骤:

s1,按照预设周期触发postgresql中的清理程序;

s2,使用所述清理程序清理所述postgresql中xlog,其中,所述xlog用于记录所述postgresql中的预写式wal信息。

可选地,本实施例中的具体示例可以参考上述实施例及可选实施方式中所描述的示例,本实施例在此不再赘述。

显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1