精华内容
下载资源
问答
  • C语言日志管理系统

    2018-01-16 18:08:40
    支持指定日志鸣,日志级别,日志路径,日志大小,最大备份数目自配置,目前支持ERROR 和普通级别,要其他级别可以自己添加,很方便.
  • 系统管理后台,包括权限管理日志收集和日志管理、考勤管理等模块,可以动态的给用户分配权限和角色。系统使用了SpringBoot、Shiro、Quartz等后端技术,使用了redis缓存用户数据,页面使用thymeleaf模版渲染页面。
  • (转)日志对于操作系统来说其重要性时不言而喻的,一个优秀的nt网络的管理员,往往会定期的备份系统日志,以备查询服务器运行状况及系统安全状况。 如果利用系统日志的“另存为”功能手工备份,则比较麻烦,而且输出...
  • Linux日志管理以及备份与恢复

    千次阅读 2017-10-09 10:27:17
    一、日志 1.日志简介 ... 除了系统默认日志外,RPM包安装的系统服务也会默认把日志记录放在/var/log/中,但这些并不由rsyslogd服务管理,而是各个服务自身的日志管理文档来记录 2.rsyslogd服务

    一、日志

    1.日志简介

        CentOS 6.x中日志服务已经变成了rsyslogd(原syslogd),功能更加全面,但无论是服务的使用还是日志文件格式都与syslogd服务相兼容

    这里写图片描述

        除了系统默认日志外,RPM包安装的系统服务也会默认把日志记录放在/var/log/中,但这些并不由rsyslogd服务管理,而是各个服务自身的日志管理文档来记录

    2.rsyslogd服务

    (1)日志文件格式

    第一字段:事件产生时间
    第二字段:事件发生服务器的主机名
    第三字段:事件发生服务名或程序名
    第四字段:事件具体信息

    (2)配置文件

        配置文件路径:/etc/rsyslog.conf

    配置文件格式
             服务名称[连接符] 日志等级 日志记录位置

    服务名称
             auth,authpriv(安全和认证相关消息),cron,daemon(守护进程相关日志),ftp,kern,lpr(打印产生的日志),user,syslod(rsyslogd服务产生的日志信息)

    连接符
             . 代表只要比后面等级高(包含该等级)的日志都记录下来
             .= 代表只记录所需等级的日志
             .! 代表除了该等级日志其他等级都记录下来

    日志等级
             debug,info,notice(普通信息,但有一定重要性),warning,err,crit(临界状态信息),alert(警告状态信息,必须立即采取行动),emerg(疼痛等级,系统已经无法使用)
             * 代表所有日志等级
             none 代表不记录

    3.日志轮替

        当日志数量越来越庞大时会占用很多硬盘空间,并且当一个日志文件很大的时候打开就会非常缓慢,为了解决这个问题,可以将日志文件进行切割,比如说按天将日志文件划分为几个小日志文件;或者把日志进行轮换,保留十天二十天的日志即可,超过阈值的日志就将其删掉,腾出空间存储新的日志。

    (1)日志文件命名规则

    配置文件中有dateext参数
             日志用日期来作为日志文件的后缀,当天的日志没有日期后缀,更新前一天文件名
    没有dateext参数
             前一天的日志文件加后缀.1,之前的日志文件后缀递增即可

    (2)logrotate

        logrotate是Linux自带的日志轮替工具,其配置文件路径为/etc/logrotate.conf

    功能描述:把日志加入轮替
    语法:vi /etc/logrotate.conf添加日志路径(如/usr/local/apache/logs/access_log) {[options]}即可
             daily/weekly/monthly 按天/周/月轮替
             rotate 数字,保留日志文件的个数
             create mode owner group,新建日志,指定权限,所有者,所属组
             size 大小,日志大于指定大小才轮替而不是按照时间
             dateext
    注意:RPM包安装的服务默认已经支持轮替,源码包则需要手工指定


    语法:logrotate [-vf] 配置文件名
             无选项 按照配置文件中的条件进行轮替
             -v 显示日志轮替过程
             -f 强制进行日志轮替

    二、备份与恢复

    1.备份策略

        完全备份:把所有需要备份的数据全部备份
        增量备份:备份与上一次备份相比新增的数据
        差异备份:每次备份和第一次完全备份相比

    2.dump与restore

    语法:dump [选项] 备份后的文件名 原文件或目录
             -level(0-9) 备份级别,0代表完全备份,1-9代表增量备份
             -f 文件名,指定备份之后的文件名
             -u 备份成功后将备份时间记录在/etc/dumpdates文件中
             -v 显示详细信息
             -j 将备份文件压缩为.bz2格式
             -W 显示被备份的分区的 备份等级及备份时间
    例子:dump -0uj -f /root/boot.bak.bz2 /boot/
    注意:dump命令只有在备份分区的时候才可以执行增量备份,目录文件只能进行完全备份


    语法:restore [-C|i|t|r] [-f]
             -C 比较备份数据与实际数据的变化
             -i 进入交互模式,手工选择需要恢复的文件
             -t 查看模式,查看备份文件中拥有哪些数据
             -r 还原模式,用于数据还原

             -f 指定备份文件的文件名
    注意:C,i,t,r 四种模式不能混用

    展开全文
  • 日志管理系统

    万次阅读 2019-06-26 11:47:19
    为什么需要日志管理系统 保留现场 自知者自明 所有即将发生的,都取决于已经发生的 数据商业化运作 1.1 日志管理系统的解决方案 机器上的日志实时收集,存储到日志中心 给日志建立索引,通过索引能很快找到...

    一.为什么需要日志管理系统

    1. 保留现场
    2. 自知者自明
    3. 所有即将发生的,都取决于已经发生的
    4. 数据商业化运作

    1.1 日志管理系统的解决方案

    1. 机器上的日志实时收集,存储到日志中心
    2. 给日志建立索引,通过索引能很快找到日志
    3. 架设web界面,在web上完成日志的搜索

    1.2 日志管理系统的困难

    1. 日志量很大,每天几十亿条
    2. 日志的实时收集,延迟控制在分钟级别
    3. 能够在线水平扩展

    1.3 业内解决方案-ELK

         ELK 不是一款软件,而是 Elasticsearch、Logstash 和 Kibana 三种软件产品的首字母缩写:

    • Elasticsearch:分布式搜索和分析引擎,具有高可伸缩、高可靠和易管理等特点。基于 Apache Lucene 构建,能对大容量的数据进行接近实时的存储、搜索和分析操作。通常被用作某些应用的基础搜索引擎,使其具有复杂的搜索功能

    • Logstash:数据收集引擎。它支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储到用户指定的位置

    • Kibana:数据分析和可视化平台。通常与 Elasticsearch 配合使用,对其中数据进行搜索、分析和以统计图表的方式展示

    1.3.1 简单ELK架构

          把一个 Logstash 数据搜集节点扩展到多个,分布于多台机器,将解析好的数据发送到 Elasticsearch server 进行存储,最后在 Kibana 查询、生成日志报表等 。

    1.3.2 引入消息队列的ELK架构

          使用 Logstash 从各个数据源搜集数据,然后经消息队列输出插件输出到消息队列中。目前 Logstash 支持 Kafka、Redis、RabbitMQ 等常见消息队列。然后 Logstash 通过消息队列输入插件从队列中获取数据,分析过滤后经输出插件发送到 Elasticsearch,最后通过 Kibana 展示。

    1.3.3 ELK方案的问题

    • 运维成本高,每增加一个日志收集,需要手动修改配置
    • 监控缺失,无法准确获取Logstash的状态二. 日志管理系统架构

    二. 日志收集系统架构

    2.1 组件介绍

    •  Log Agent:日志收集客户端,用来收集服务器上的日志
    •  Kafka:基于zookeeper协调的高吞吐量的分布式队列
    •  ES:elasticsearch,开源的分布式搜索引擎,给文档建立索引
    •  Hadoop:分布式计算框架,能够对大量数据进行分布式处理的平台

    2.2.1 日志采集工具介绍

                                                                Logstash

    优势:

           Logstash 主要的有点就是它的灵活性,主要因为它有很多插件,详细的文档以及直白的配置格式让它可以在多种场景下应用。我们基本上可以在网上找到很多资源,几乎可以处理任何问题。

    劣势:

            Logstash 致命的问题是它的性能以及资源消耗(默认的堆大小是 1GB)。尽管它的性能在近几年已经有很大提升,与它的替代者们相比还是要慢很多的。这里有 Logstash 与 rsyslog 性能对比以及Logstash 与 filebeat 的性能对比。它在大数据量的情况下会是个问题。另一个问题是它目前不支持缓存,目前的典型替代方案是将 Redis 或 Kafka 作为中心缓冲池:

    典型应用场景:

           因为 Logstash 自身的灵活性以及网络上丰富的资料,Logstash 适用于原型验证阶段使用,或者解析非常的复杂的时候。在不考虑服务器资源的情况下,如果服务器的性能足够好,我们也可以为每台服务器安装 Logstash 。我们也不需要使用缓冲,因为文件自身就有缓冲的行为,而 Logstash 也会记住上次处理的位置。如果服务器性能较差,并不推荐为每个服务器安装 Logstash ,这样就需要一个轻量的日志传输工具,将数据从服务器端经由一个或多个 Logstash 中心服务器传输到 Elasticsearch:随着日志项目的推进,可能会因为性能或代价的问题,需要调整日志传输的方式(log shipper)。当判断 Logstash 的性能是否足够好时,重要的是对吞吐量的需求有着准确的估计,这也决定了需要为 Logstash 投入多少硬件资源。

                                                                 Filebeat

    优势:

           Filebeat 只是一个二进制文件没有任何依赖。它占用资源极少,尽管它还十分年轻,正式因为它简单,所以几乎没有什么可以出错的地方,所以它的可靠性还是很高的。它也为我们提供了很多可以调节的点,例如:它以何种方式搜索新的文件,以及当文件有一段时间没有发生变化时,何时选择关闭文件句柄。

    劣势:

          Filebeat 的应用范围十分有限,所以在某些场景下我们会碰到问题。例如,如果使用 Logstash 作为下游管道,我们同样会遇到性能问题。正因为如此,Filebeat 的范围在扩大。开始时,它只能将日志发送到 Logstash 和 Elasticsearch,而现在它可以将日志发送给 Kafka 和 Redis,在 5.x 版本中,它还具备过滤的能力。

    典型应用场景:

          Filebeat 在解决某些特定的问题时:日志存于文件,我们希望将日志直接传输存储到 Elasticsearch。这仅在我们只是抓去(grep)它们或者日志是存于 JSON 格式(Filebeat 可以解析 JSON)。或者如果打算使用 Elasticsearch 的 Ingest 功能对日志进行解析和丰富。将日志发送到 Kafka/Redis。所以另外一个传输工具(例如,Logstash 或自定义的 Kafka 消费者)可以进一步丰富和转发。这里假设选择的下游传输工具能够满足我们对功能和性能的要求。

                                                                 Logagent

    优势:

           可以获取 /var/log 下的所有信息,解析各种格式(Elasticsearch,Solr,MongoDB,Apache HTTPD等等),它可以掩盖敏感的数据信息,例如,个人验证信息(PII),出生年月日,信用卡号码,等等。它还可以基于 IP 做 GeoIP 丰富地理位置信息(例如,access logs)。同样,它轻量又快速,可以将其置入任何日志块中。在新的 2.0 版本中,它以第三方 node.js 模块化方式增加了支持对输入输出的处理插件。重要的是 Logagent 有本地缓冲,所以不像 Logstash ,在数据传输目的地不可用时会丢失日志。

    劣势:

          尽管 Logagent 有些比较有意思的功能(例如,接收 Heroku 或 CloudFoundry 日志),但是它并没有 Logstash 灵活。

    典型应用场景:

          Logagent 作为一个可以做所有事情的传输工具是值得选择的(提取、解析、缓冲和传输)。

     

                                                            tailf示例:

    package main
    
    import (
    	"fmt"
    	"github.com/hpcloud/tail"
    	"time"
    )
    func main() {
    	filename := "./my.log"
    	tails, err := tail.TailFile(filename, tail.Config{
    		ReOpen:    true,
    		Follow:    true,
    		Location:  &tail.SeekInfo{Offset: 0, Whence: 2},
    		MustExist: false,
    		Poll:      true,
    	})
    	if err != nil {
    		fmt.Println("tail file err:", err)
    		return
    	}
    	var msg *tail.Line
    	var ok bool
    	for true {
    		msg, ok = <-tails.Lines
    		if !ok {
    			fmt.Printf("tail file close reopen, filename:%s\n", tails.Filename)
    			time.Sleep(100 * time.Millisecond)
    			continue
    		}
    		fmt.Println("msg:", msg)
    	}
    }
    

    2.2.2 Kafka介绍

    介绍:

            Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景:比如基于hadoop的批处理系统、低延迟的实时系统、storm/Spark流式处理引擎,web/nginx日志、访问日志,消息服务等等,用scala语言编写,Linkedin于2010年贡献给了Apache基金会并成为顶级开源 项目。

    Kafka的特性:

           高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒,每个topic可以分多个partition, consumer group 对partition进行consume操作。

    • 可扩展性:kafka集群支持热扩展
    • 持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失
    • 容错性:允许集群中节点失败(若副本数量为n,则允许n-1个节点失败)
    • 高并发:支持数千个客户端同时读写

    Kafka的应用场景:

    • 异步处理:把非关键流程异步化,提高系统的响应时间和健壮性

     

    • 应用解耦:通过消息队列

    • 流量削峰:缓存消息

     

    Kafka的原理:

            两个服务器Kafka群集,托管四个分区(P0-P3),包含两个使用者组。消费者组A有两个消费者实例,B组有四个消费者实例。每个实例(server)成为broker。无论是kafka集群,还是producer和consumer都依赖于zookeeper来保证系统可用性集群保存一些meta信息。

     

     

          一个Topic可以认为是一类消息,每个topic将被分成多个partition(区),每个partition在存储层面是append log文件。任何发布到此partition的消息都会被直接追加到log文件的尾部,每条消息在文件中的位置称为offset(偏移量),offset为一个long型数字,它是唯一标记一条消息。它唯一的标记一条消息。kafka并没有提供其他额外的索引机制来存储offset,因为在kafka中几乎不允许对消息进行“随机读写”。

    Kafka使用示例:

    package main
    
    import (
    	"fmt"
    	"github.com/Shopify/sarama"
    )
    
    func main() {
    	config := sarama.NewConfig()
    	config.Producer.RequiredAcks = sarama.WaitForAll
    	config.Producer.Partitioner = sarama.NewRandomPartitioner
    	config.Producer.Return.Successes = true
    
    	msg := &sarama.ProducerMessage{}
    	msg.Topic = "nginx_log"
    	msg.Value = sarama.StringEncoder("this is a good test, my message is good")
    
    	client, err := sarama.NewSyncProducer([]string{"192.168.31.177:9092"}, config)
    	if err != nil {
    		fmt.Println("producer close, err:", err)
    		return
    	}
    
    	defer client.Close()
    
    	pid, offset, err := client.SendMessage(msg)
    	if err != nil {
    		fmt.Println("send message failed,", err)
    		return
    	}
    
    	fmt.Printf("pid:%v offset:%v\n", pid, offset)
    }
    

    2.2.3 Elasticsearch介绍

    介绍:

            Elasticsearch(ES)是一个基于Lucene构建的开源、分布式、RESTful接口的全文搜索引擎。Elasticsearch还是一个分布式文档数据库,其中每个字段均可被索引,而且每个字段的数据均可被搜索,ES能够横向扩展至数以百计的服务器存储以及处理PB级的数据。可以在极短的时间内存储、搜索和分析大量的数据。

    Near Realtime(NRT) 几乎实时

    Elasticsearch是一个几乎实时的搜索平台。意思是,从索引一个文档到这个文档可被搜索只需要一点点的延迟,这个时间一般为毫秒级。

    Cluster 集群

           群集是一个或多个节点(服务器)的集合, 这些节点共同保存整个数据,并在所有节点上提供联合索引和搜索功能。一个集群由一个唯一集群ID确定,并指定一个集群名(默认为“elasticsearch”)。该集群名非常重要,因为节点可以通过这个集群名加入群集,一个节点只能是群集的一部分。

           确保在不同的环境中不要使用相同的群集名称,否则可能会导致连接错误的群集节点。例如,你可以使用logging-dev、logging-stage、logging-prod分别为开发、阶段产品、生产集群做记录。

    Node节点

          节点是单个服务器实例,它是群集的一部分,可以存储数据,并参与群集的索引和搜索功能。就像一个集群,节点的名称默认为一个随机的通用唯一标识符(UUID),确定在启动时分配给该节点。如果不希望默认,可以定义任何节点名。这个名字对管理很重要,目的是要确定你的网络服务器对应于你的ElasticSearch群集节点。

           我们可以通过群集名配置节点以连接特定的群集。默认情况下,每个节点设置加入名为“elasticSearch”的集群。这意味着如果你启动多个节点在网络上,假设他们能发现彼此都会自动形成和加入一个名为“elasticsearch”的集群。

          在单个群集中,您可以拥有尽可能多的节点。此外,如果“elasticsearch”在同一个网络中,没有其他节点正在运行,从单个节点的默认情况下会形成一个新的单节点名为"elasticsearch"的集群。

    Index索引

           索引是具有相似特性的文档集合。例如,可以为客户数据提供索引,为产品目录建立另一个索引,以及为订单数据建立另一个索引。索引由名称(必须全部为小写)标识,该名称用于在对其中的文档执行索引、搜索、更新和删除操作时引用索引。在单个群集中,您可以定义尽可能多的索引。

    Type类型

           在索引中,可以定义一个或多个类型。类型是索引的逻辑类别/分区,其语义完全取决于您。一般来说,类型定义为具有公共字段集的文档。例如,假设你运行一个博客平台,并将所有数据存储在一个索引中。在这个索引中,您可以为用户数据定义一种类型,为博客数据定义另一种类型,以及为注释数据定义另一类型。

     Document文档

          文档是可以被索引的信息的基本单位。例如,您可以为单个客户提供一个文档,单个产品提供另一个文档,以及单个订单提供另一个文档。本文件的表示形式为JSON(JavaScript Object Notation)格式,这是一种非常普遍的互联网数据交换格式。在索引/类型中,您可以存储尽可能多的文档。请注意,尽管文档物理驻留在索引中,文档实际上必须索引或分配到索引中的类型。

    Shards & Replicas分片与副本

           索引可以存储大量的数据,这些数据可能超过单个节点的硬件限制。例如,十亿个文件占用磁盘空间1TB的单指标可能不适合对单个节点的磁盘或可能太慢服务仅从单个节点的搜索请求。为了解决这一问题,Elasticsearch提供细分你的指标分成多个块称为分片的能力。当你创建一个索引,你可以简单地定义你想要的分片数量。每个分片本身是一个全功能的、独立的“指数”,可以托管在集群中的任何节点。

    Shards分片的重要性主要体现在以下两个特征:

    • 分片允许您水平拆分或缩放内容的大小
    • 分片允许你分配和并行操作的碎片(可能在多个节点上)从而提高性能/吞吐量,这个机制中的碎片是分布式的以及其文件汇总到搜索请求是完全由ElasticSearch管理,对用户来说是透明的。

           在同一个集群网络或云环境上,故障是任何时候都会出现的,拥有一个故障转移机制以防分片和结点因为某些原因离线或消失是非常有用的,并且被强烈推荐。为此,Elasticsearch允许你创建一个或多个拷贝,你的索引分片进入所谓的副本或称作复制品的分片,简称Replicas。

    Replicas的重要性主要体现在以下两个特征:

    • 副本为分片或节点失败提供了高可用性。为此,需要注意的是,一个副本的分片不会分配在同一个节点作为原始的或主分片,副本是从主分片那里复制过来的。
    • 副本允许用户扩展你的搜索量或吞吐量,因为搜索可以在所有副本上并行执行。

     Elasticsearch代码示例:

    package main
    
    import (
    	"fmt"
    	elastic "gopkg.in/olivere/elastic.v2"
    )
    
    type Tweet struct {
    	User    string
    	Message string
    }
    
    func main() {
    	client, err := elastic.NewClient(elastic.SetSniff(false), elastic.SetURL("http://192.168.31.177:9200/"))
    	if err != nil {
    		fmt.Println("connect es error", err)
    		return
    	}
    
    	fmt.Println("conn es succ")
    
    	tweet := Tweet{User: "olivere", Message: "Take Five"}
    	_, err = client.Index().
    		Index("twitter").
    		Type("tweet").
    		Id("1").
    		BodyJson(tweet).
    		Do()
    	if err != nil {
    		// Handle error
    		panic(err)
    		return
    	}
    
    	fmt.Println("insert succ")
    }
    

     

    展开全文
  • linux 系统备份日志

    2017-06-10 20:40:00
    小明是一个服务器管理员,他需要每天备份论坛数据(这里我们用日志替代),备份当天的日志并删除之前的日志。而且备份之后文件名是年-月-日的格式。alternatives.log在/var/log/下面。 目标 为shiyanlou用户添加...

    题目:

    备份日志

    小明是一个服务器管理员,他需要每天备份论坛数据(这里我们用日志替代),备份当天的日志并删除之前的日志。而且备份之后文件名是年-月-日的格式。alternatives.log在/var/log/下面。

    目标

    1. 为shiyanlou用户添加计划任务
    2. 每天凌晨3点的时候定时备份alternatives.log到/home/shiyanlou/tmp/目录
    3. 命名格式为年-月-日,比如今天是2017年4月1日,那么文件名为2017-04-01

    提示

    • date
    • crontab
    • cp(备份)
    • 用一条命令写在crontab里面即可,不用写脚本

    注:如果fail没有任何提示信息,请刷新一下页面。注意crontab的计划用户者

    crontab -e 表示为当前用户添加计划任务
    sudo crontab -e 表示为root用户添加计划任务
    


    答案:
    1、启动日志服务器
    sudo service rsyslog start
    2.启动crontab 服务
    sudo cron -f &
    3.进入 crontab 文件
    crontab -e
    4.编辑自动启动内容
    0 3 * * * cp /var/log/alternatives.log /home/shiyanlou/tmp/'date+ %y-%m-%d'


    如果出现cron -f & 启动失败

     rm -rf /var/run/crond.pid

    重启 service rsyslog start




    转载于:https://www.cnblogs.com/ggh03/p/6979861.html

    展开全文
  • 备份概述数据备份分类完整数据库备份文件备份部分备份差异备份日志备份事务日志备份最常用的备份方法选择备份策略和恢复模式备份策略简单恢复模式下的备份简单恢复模式下的完整数据库备份+差异数据库备份完整恢复...


    数据备份分类

    根据备份目标分类
    • 数据备份
    • 日志备份
    根据备份数据文件的范围进行分类
    • 完整数据库备份
    • 文件备份
    • 部分备份
    完整数据库备份

    原理
    复制数据库里的所有信息,通过一个单个完整备份可将数据库恢复到某个时间点的状态。但由于数据库备份是一个在线的操作,一个大的完整数据库备份需要一段时间,数据库在该段时间内还会发生变化。所以完整数据库备份还要对部分事务日志进行备份,以使恢复数据库到一个事务一致的状态。

    适用场景:小数据库

    • 简单易用
    • 速度快

    不适用场景:大数据库

    • 耗时
    • 占用大量存储空间
    从是否复制所有的数据分类
    • 完整备份
    • 差异备份
    差异备份

    差异备份原理
    差异备份基于差异,备份要求数据库之前做过一次完整备份。差异备份仅捕获自该次完整备份后发生更改的数据,这个完整备份被称为差异备份的“基准”。差异备份仅仅包括建立差异基准后更改的数据。

    差异备份相对完整备份的优点

    • 占用少量存储空间
    • 备份速度快
    • 便于频繁执行,从而降低数据丢失风险

    日志备份

    事务日志备份

    每个日志备份都包括创建备份时处于活动状态的部分事务日志以及先前日志备份中未备份的所有日志记录。不间断的日志备份序列包含数据库的完整日志链。在完整恢复模式下,连续不断的日志链可以将数据库还原到任意时间点。

    最常用的备份方法
    分级完整备份差异备份日志备份
    数据库级完整数据库备份差异数据库备份(一般)日志备份
    文件级完整文件备份差异文件备份(一般)日志备份

    选择备份策略和恢复模式

    SQL Server 数据丢失的最大时间段

    利用数据备份恢复机制保护数据,是不可能保证数据一点都不丢失的,SQL Server 不可能时时刻刻做数据库备份,每次备份之间总要有一定的时间间隔。此时间间隔之间的数据变化在下一次备份之前,是没有保护的。因此,数据丢失的最大时间段就是两次备份之间的时间间隔。

    频繁备份是否合适?

    既然数据丢失的最大时间段为两次备份之间的时间间隔,提高备份频率,降低备份间隔,从而减少数据丢失量。但是,备份越频繁,需要的投入也越多。

    • 备份越多,要管理的备份文件也越多,即数据库恢复时要恢复的文件也越多。要建立一个合适的备份管理制度
    • 备份虽不会阻塞数据库的正常操作,但会占用磁盘IO。若服务器本身IO就比较繁忙,频繁的备份会降低数据库的IO性能。
    • 备份难免会因为种种因素失败,备份越频繁,遇到失败的几率越大。因此 DBA 需要及时处理错误,将备份任务恢复常态。

    日志备份的局限性
    使用日志备份,可将数据库恢复到故障点或特定的时间点。因此日志备份在备份策略中具有很重要的角色。但日志备份只能在完整恢复模式和有些大容量日志恢复模式的数据库上进行。制定备份策略,首先要决定是否需要日志备份,若需要,则数据库恢复模式就要选成完整模式,若不需要做日志备份,则数据库模式就要设置简单,否则会遇到日志文件无线增长问题。

    简单恢复模式下的备份

    简单恢复模式下,不能做日志备份,所以它只支持最简单的备份和还原方式,很容易管理。如果没有日志备份,则只能将数据库恢复到最后一次备份的结尾。若发生灾难,数据库最后一次备份之后所做的数据修改将全部丢失。

    如下图所示,数据库有5个备份,灾难发生在 t6 时间点,因此只有在时间 t5 进行的最新的一份数据库备份需要被还原。还原此备份会将数据库恢复到 t5 这个时间点,t5 时间点之后的数据更新都会丢失。
    在这里插入图片描述

    优点

    • 容易管理
    • 恢复简单

    缺点

    • 无日志备份,只能将数据库恢复到最后一次备份的结尾
    • 数据丢失风险会随时间增长和增加,直到进行下一个完整备份或差异备份为止。

    建议

    限定充足的备份频率,以避免遗失大量数据。同时,频率也不能太高而让备份变得难以管理。

    使用场景

    只适合于可频繁备份的小型数据库

    简单恢复模式下的完整数据库备份+差异数据库备份

    为降低风险,可引入差异备份,使用差异数据库备份补充数据库完整备份,从而降低工作损失风险的一种备份策略。

    如下图所示,在第一次数据库完整备份后,连续建立了三次差异备份。第三次差异备份后,进行第二次数据库完整备份,建立新的差异基准。

    在这里插入图片描述

    差异备份相对完整备份的优点

    • 开销低
    • 可频繁执行

    适用场景

    数据库数据量稍大,能够容忍较长时间数据丢失的。

    简单恢复模式总结

    不管是数据库完整备份和数据库差异备份,都不可能以比较频繁的频率进行,一般都只能在晚间进行。若数据库比较庞大,或者不允许比较长时间的数据丢失,这样的备份策略是不能满足要求的,必须引入日志备份,建立更为复杂,但是也更强大的恢复策略。

    完整恢复模式下的备份

    选取完整恢复模式可以使用日志备份。由于日志备份只复制上次日志备份以来的所有日志记录,所以开销会比数据库备份小很多,可以定义一种很频繁的频率(5分钟甚至更短)来做备份,以达到在最大限度内防止出现故障时丢失数据的目的。

    使用日志备份的优点

    • 允许将数据库还原到日志备份内包含的任何时间点(时点恢复)
    • 假定可以在发生严重故障后备份活动日志,则可将数据库一直还原到没有发生数据丢失的故障点处

    使用日志备份的缺点

    • 日志备份文件数量多
    • 恢复备份时,需要严格按照备份产生的顺序依次恢复。中间不能有任何备份缺失或跳跃。所以日志备份做的越多,还原时间越长,管理复杂性也越高

    下图所示为完整恢复模式下的最简单备份策略,在此图中,已完成了数据库备份 Db_1 及两个例行日志备份 Log_1 和 Log_2。在 Log_2 日志备份后的某个时间,数据库出现故障。在还原这三个备份前,DBA 必须首先备份活动日志(日志尾部),然后还原 Db_1 、Log_1 、Log_2,并且不恢复数据库,接着 DBA 还原并恢复尾(Tail)日志文件。这一步可以把数据库恢复到故障点,从而恢复所有数据。如果尾日志能够成功地备份和恢复,这次灾难可能甚至不会带来任何数据丢失。如果灾难毁坏的时日志文件,使得尾日志不能成功备份和恢复,这次灾难造成的数据丢失就是从 Log_2 以后的所有修改。

    在这里插入图片描述

    数据丢失最大时间段

    在第一个完整数据库备份完成,并且常规日志备份开始之后,潜在的工作丢失风险存在事件仅为数据库损坏时间点,即到上一次常规日志备份的那一段时间。

    建议

    建议经常执行日志备份,以将工作丢失的风险限定在业务要求所允许的范围内。

    缺点

    • 灾难发生后,需要恢复的日志文件数量太多。

      每1小时做一次日志备份。每周在周日做一次数据库完整备份。若灾难在周5发生,则不得不恢复 5*24=120个日志备份。恢复日志文件过多其花费的时间成本较大。

    模拟场景
    为了最大程度地缩短还原时间,可对相同数据进行一系列差异备份做补充。

    完整数据库备份 + 差异数据库备份+日志备份

    下图所示为使用差异数据库备份及一系列例行日志备份来补充完整数据库备份。使用事务日志备份可缩短潜在的工作丢失风险的存在时间,使该风险仅在最新日志备份之后存在。在第一个数据库备份完成后,每天做一个差异数据库备份,而在工作时间进行若干日志备份。
    在这里插入图片描述

    上图中第一个数据库备份创建之前,数据库存在潜在的工作丢失风险(从时间 t0 到时间 t1)。该备份建立之后,例行日志备份将工作丢失的风险降为丢失自最近日志备份之后所做的修改(最近备份的时间为 t14)。如果发生故障,则应立即尝试备份活动日志(尾部日志),若此“尾部日志备份”成功,则数据库可还原到故障点。

    下面以 AdventureWorksDW2018 数据库为例,来了解完整恢复模式下的数据库备份
    AdventureWorksDW 数据库的安装请参考 SQL SERVER 自带数据库下载安装

    实践前准备

    清空表 msdb..backupset 上 2018/09/28 之前的记录,注意时间

    USE msdb;  
    GO  
    EXEC sp_delete_backuphistory @oldest_date = '09/28/2018';  
    

    AdventureWorksDW2018 库的恢复模式修改为完整恢复模式,否则会报 4208 错误

    USE master ;  
    ALTER DATABASE AdventureWorksDW2018 SET RECOVERY FULL ;
    

    显示 AdventureWorksDW2018 这个数据库历史上曾经的备份信息。

    use msdb;
    select distinct s.first_lsn, s.last_lsn,
                    s.database_backup_lsn, s.backup_start_date, s.backup_finish_date,
    				s.type, y.physical_device_name 
      from msdb..backupset s inner join 
           msdb..backupfile f on f.backup_set_id = s.backup_set_id inner join
    	   msdb..backupmediaset m on s.media_set_id = m.media_set_id inner join
    	   msdb..backupmediafamily y on m.media_set_id = y.media_set_id
     where (s.database_name = 'AdventureWorksDW2018')
     order by s.backup_finish_date desc;
    

    备份信息字段含义
    对于日志备份来讲

    字段含义
    first_lsn标识备份集中第一个日志记录的日志序列号
    last_lsn标识备份集之后的下一条日志记录的日志序列号
    (fisrt_lsn, last_lsn-1)标识此日志备份所包含的所有日志序列
    last_lsn-1表示前面一条日志序列号,而不表示日志序列号减 1,因为日志序列号虽然是递增的,但并不表示一定以 1 为单位递增
    (fisrt_lsn, last_lsn)表示做数据恢复时,在做 roll forward(前滚)动作时,一定要遍历的 LSN,不然的话数据库在做恢复的时候,数据会不一致
    database_backup_lsn标识上一次数据库做全备份的起始 LSN

    TYPE
    标识数据库备份的类型

    类型含义
    D数据库
    L日志
    I差异数据库
    F文件或文件组

    1. 对数据库做一个全备份

    BACKUP DATABASE [AdventureWorksDW2018] TO DISK='F:\backup\AdvFull1.bak'
    

    查询数据库的历史备份记录,显式一个全备份
    在这里插入图片描述

    2. 对数据库做一个操作,然后做一个日志备份

    --drop table t1;
    use AdventureWorksDW2018;
    create table t1(number int, name nvarchar(50));
    insert into t1 values(1, 'a');
    go 
    BACKUP LOG [AdventureWorksDW2018] TO DISK='F:\backup\AdvLog2.bak'
    

    再次执行查询,可看到又添加了一条新的记录如下图所示。此备份时日志备份,LSN 是从 5700000002880000157000000039200001

    在这里插入图片描述

    3. 对数据库做一个操作,再做一个日志备份

      use AdventureWorksDW2018;
      insert into t1 values(2, 'b');
      go
      BACKUP LOG [AdventureWorksDW2018] TO DISK='F:\backup\AdvLog3.bak'
    

    再次执行查询,可看到又添加了一条新的记录如下图所示。这个备份日志备份,LSN 是从 5700000003920000157000000040800001,可观察到这个日志备份的 first_lsn 和上一次日志备份的 last_lsn 一定是一样的。这是因为数据库在做日志备份的时候,LSN 要求是连续的。

    在这里插入图片描述

    4.对数据库做一个操作,再做一个差异备份

    use AdventureWorksDW2018;
    insert into t1 values(3, 'c');
    go 
    BACKUP DATABASE [AdventureWorksDW2018] TO DISK='F:\backup\AdvDiff4.bak' WITH DIFFERENTIAL;
    

    再次执行查询,可看到又添加了一条新的记录,这个备份时差异备份,如下图所示
    在这里插入图片描述

    5. 一直这样操作,最后对数据库做一次日志操作,如下图所示

    -- 插入一条数据,再做一个差异备份
    use AdventureWorksDW2018;
    insert into t1 values(4, 'd');
    go 
    BACKUP DATABASE [AdventureWorksDW2018] TO DISK='F:\backup\AdvDiff5.bak' WITH DIFFERENTIAL;
    -- 插入一条数据,再做一个日志备份
    use AdventureWorksDW2018;
    insert into t1 values(6, 'f');
    go
    BACKUP LOG [AdventureWorksDW2018] TO DISK='F:\backup\AdvLog7.bak'
    -- 插入一条数据,再做一个日志备份
    use AdventureWorksDW2018;
    insert into t1 values(8, '8');
    go
    BACKUP LOG [AdventureWorksDW2018] TO DISK='F:\backup\AdvLog8.bak'
    -- 插入一条数据,再做一个差异备份
    use AdventureWorksDW2018;
    insert into t1 values(9, '9');
    go 
    BACKUP DATABASE [AdventureWorksDW2018] TO DISK='F:\backup\AdvDiff9.bak' WITH DIFFERENTIAL;
    -- 插入一条数据,再做一个日志备份
    use AdventureWorksDW2018;
    insert into t1 values(10, '10');
    go
    BACKUP LOG [AdventureWorksDW2018] TO DISK='F:\backup\AdvLog10.bak'
    -- 插入一条数据,再做一个日志备份
    use AdventureWorksDW2018;
    insert into t1 values(11, '11');
    go
    BACKUP LOG [AdventureWorksDW2018] TO DISK='F:\backup\AdvLog11.bak'
    

    在这里插入图片描述

    总结
    first
    不管是全备份还是差异备份,都不会影响 LSN 的序列。因此,即使最近的几个全备份或差异备份受损,只要有一个全备份,以及该全备份后所有的日志备份,我们也是能够完整无缺地把数据恢复出来,只是恢复的时间会稍微长一点。中间的差异备份或其他全备份只是减少了需要恢复的日志备份数目。这进一步说明了日志备份的重要性。
    second
    日志备份的 LSN 是连续的。否则在恢复的时候,会碰到日志链断裂的问题,恢复时不能继续下去的。

    参考资料

    <<SQL Server 2012 实施与管理实战指南>>

    查看或更改数据库的恢复模式 (SQL Server)
    维护计划实现备份:每周数据库完整备份、每天差异备份、每小时日志备份

    SQL Server 2012入门备份与恢复数据库篇:总揽

    windows7 设置文件夹的权限设置

    展开全文
  • logrotate linux 系统日志备份压缩工具

    千次阅读 2015-11-26 15:38:53
    logrotate 是作为linux系统日志管理工具存在。它可以轮换、压缩、邮件系统日志文件。默认的 logrotate 被加入 cron 的 /etc/cron.daily 中作为每日任务执行。 /etc/logrotate.conf 为其默认配置文件指定每个日志...
  • In this article, we will cover SQL Server Transaction log backups, truncate and shrink operations with an overview and examples ... 在本文中,我们将介绍SQL Server事务日志备份,截断和收缩操作,并...
  • 文章目录还原方案数据库级(数据库完整还原)不同恢复模式所支持的各种还原方案数据库完整还原完整数据库备份+差异备份+事务日志备份 示例参考资料 还原方案 数据库级(数据库完整还原) 还原和恢复整个数据库。...
  • CentOS7 利用rsyslog建立日志备份(同步)服务前言0x01 服务端配置0x02 客户端配置0x03 测试0x04 总结 前言 日志是查看系统运行情况的一个重要部分,在应急响应中,服务器的日志文件就扮演了一个特别重要的作用,...
  • 事务日志备份与恢复

    千次阅读 2017-11-14 14:28:00
    当一切正常时,没有必要特别留意什么是事务日志,它是如何工作的。你只要确保每个数据库都有...它不会经常提起,除非你的数据库运行在简单(SIMPLE)恢复模式,在事务日志上定期备份非常重要的。这会控制事务日志大...
  • Log日志定期备份(Windows定时任务)

    千次阅读 2020-05-12 19:14:07
    一、系统定时任务 屏幕左下角右键 》计算机管理 》任务计划程序 》任务计划
  • Windows日志清除工具

    2018-10-29 23:28:39
    可以备份、清除Windows日志,使用自定义的大量垃圾信息覆盖现有日志
  • 基于django制造行业企业内部绩效管理系统 集成了数据管理,可视化,用户管理,权限组,日志,数据库备份,开放接口等实用功能 功能菜单一览 首页 展示了系统概要信息 当月添加订单数 您的工号,部门,角色 系统公告 ...
  • 一个优秀的管理员是应该养成备份日志的习惯,如果有条件的话还应该把日志转存到备份机器上或直接转储到打印机上,在这里推荐微软的resourceKit工具箱中的dumpel.exe,他的常用方法:  dumpel -f filename -s ...
  • 赢途员工工作日志管理系统1.0源码

    热门讨论 2009-12-15 10:45:57
    系统的主要功能有工作日志添加、管理,共享日志列表查看,任务下达、管理、统计,新闻公告、及内部短信息模块,还有MSSQL的在线备份管理。  可用于中小型公司对员工的工作情况管理及安排工作任务。  系统是ASP写...
  • 运维日志 数据备份同步的几个方案

    千次阅读 2017-05-16 10:25:36
    最近公司有这么一个需求。某ERP并发不高,web数据不大,单台服务器就能满足需求,暂时不需要负载均衡。...所以想搞多一台服务器做灾备,实现高可用和数据备份。选择服务器目前业务主要面向华南地区的
  • 文章目录一、Mysql日志管理基础命令(一)、Mysql常用日志类型及开启二、查看日志状态三、Mysql备份与恢复 一、Mysql日志管理基础命令 Mysql默认日志保存位置为 usr/local/mysql/data 日志开启方式有两种:通过配置...
  • 之前的文章Systemd日志管理服务:Journald以及重要配置选项介绍了Journald这个systemd引入的用于收集和存储日志数据的系统服务,本文将讨论systemd用来查看和处理系统日志的程序Journalctl,该实用程序可用于访问和...
  • 最佳日志管理工具:51个有用的日志管理、监视、分析等工具 痛苦的纯文本日志管理...日志不是一件容易处理的事情,但无论如何都是任何生产系统的一个重要方面。当您面临一个困难的问题时,使用日志管理解决方案要比...
  • 实验楼_Linux基础入门_挑战2_备份日志 || crontab的使用
  • Linux学习(七)日志备份和启动管理

    千次阅读 2017-09-03 11:24:00
    Linux日志备份和启动管理
  • Cisco ASA防火墙的日志管理

    千次阅读 2019-05-30 21:41:27
    日志信息的安全级别 日志信息可以输出到Log Buffer(日志缓冲区)、ASDM和日志服务器。配置Log buffer: ASA(config)# clock timezone peking 8 #peking表示北京时间,8表示国际标准时间的偏移量 ASA(config)# ...
  • 内核及系统日志 用户日志 程序日志 查看日志的工具:tail 、 more 、 less 、 cat 、 who 、 w 、 ...1、日志备份和归档 2、延长日志保存期限 3、控制日志访问权限 4、集中管理日志 runlevel 运行级别 ...
  • 要启用日志的自动备份,请转到系统->配置->高级->系统->日志清理,然后将备份日志设置为是: 将“保存日志,天数”设置为较短的天数(即7天)以减少数据库使用量。 备份日志保存在var / log / visitorlog中。
  • Deepin 系统日志查看

    千次阅读 2019-09-27 09:23:43
    日志文件能够详细记录系统每天发生的各种各样的事件。用户可以通过日志文件检查错误产生的原因,或者在受到攻击和黑客入侵时追踪攻击者的踪迹。 日志对于系统的安全来说非常重要,它记录了系统每天发生的各种各样的...
  • 日志管理ELK

    千次阅读 2018-03-13 15:52:42
    运维架构日志管理ELK:ElasticSearch 、 Logstash 和 Kibana 介绍,结合redis安装配置及展示更多干货分布式实战(干货)spring cloud 实战(干货)mybatis 实战(干货)spring boot 实战(干货)React 入门实战...
  • 文件系统数据可以被定义为物理存储或逻辑存储上的文件和文件管理结构的集合。Oracle安全备份可以将文件系统中所有类型的文件备份到磁带中。例如,可以使用Oracle安全备份备份一个主机的根目录或者一个Oracle数据库的...
  • Python Django项目日志查询系统

    万次阅读 2020-08-07 18:06:11
    该项目适合中小型公司日志查询工作。大型公司可以使用elk等。 日志查询系统 维护手册 作者:陈土锋 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 183,158
精华内容 73,263
关键字:

日志备份管理系统