配置文件和配置表定期備份小工具

来源:http://www.cnblogs.com/smokefire/archive/2016/12/22/6212035.html
-Advertisement-
Play Games

現在維護的配置文件/表都是人手工備份,上次某機器宕機,想在別的機器上拉起應用,去找備份的時候,發現最近的備份還是去年的,因此有了這個想法寫這麼一個小工具才進行定期備份。其實細極思恐,每天備份一下還是很有必要的,出事了,也能找到是哪天開始的不是? 設計的思路還是先把哪些機器的文件、哪個資料庫的表需要備 ...


 

 現在維護的配置文件/表都是人手工備份,上次某機器宕機,想在別的機器上拉起應用,去找備份的時候,發現最近的備份還是去年的,因此有了這個想法寫這麼一個小工具才進行定期備份。其實細極思恐,每天備份一下還是很有必要的,出事了,也能找到是哪天開始的不是?

 

設計的思路還是先把哪些機器的文件、哪個資料庫的表需要備份,放入資料庫中,然後弄一個shell,在某個機器上啟動這個shell,使用ftp去備份配置文件,使用exp去dmp資料庫文件,完成備份。

 

首先是資料庫設計部分,需要兩張表:

“機器表”:

create table MONI_SYS_MACHINE

(

  machine_id    NUMBER not null, 

  machine_type  CHAR(1),   

  machine_info  VARCHAR2(20),

  machine_name  VARCHAR2(20),

  machine_class VARCHAR2(10),

  shortname     VARCHAR2(10),

  username      VARCHAR2(20),

  userpasswd    VARCHAR2(100)

)

comment on column MONI_SYS_MACHINE.machine_id

  is '機器編號,';

comment on column MONI_SYS_MACHINE.machine_type

  is '機器類型,M代表主機 D代表資料庫';

comment on column MONI_SYS_MACHINE.machine_info

  is '機器信息,填oracle ,AIX,linux等,便於將來shell等玩意兒擴展用';

comment on column MONI_SYS_MACHINE.machine_name

  is '機器名,對於主機,填寫IP,對於資料庫,填寫TNS';

comment on column MONI_SYS_MACHINE.machine_class

  is '機器分類,用於批量執行腳本';

comment on column MONI_SYS_MACHINE.shortname

  is '機器別名,用於機器無密碼登錄';

comment on column MONI_SYS_MACHINE.username

  is '用戶名';

comment on column MONI_SYS_MACHINE.userpasswd

  is '加密密碼';

註:對於這個工具,機器分類,機器別名,機器信息無實際意義。

                       

 

 

備份配置表:

create table MONI_BACKINFO_CFG

(

  cfg_id       NUMBER not null,

  machine_id   NUMBER,

  backpath     VARCHAR2(1024),

  backcycle    NUMBER,

  lastbacktime DATE

)

comment on column MONI_BACKINFO_CFG.cfg_id

  is '配置ID';

comment on column MONI_BACKINFO_CFG.machine_id

  is '機器ID';

comment on column MONI_BACKINFO_CFG.backpath

  is '備份目錄,對於主機,可以為備份目錄名或者文件名,對於資料庫,則為表名';

comment on column MONI_BACKINFO_CFG.backcycle

  is '備份周期,按天';

comment on column MONI_BACKINFO_CFG.lastbacktime

  is '最後備份日期';

 

 

SHELL部分:

1:從資料庫中讀取配置,讀取的邏輯如下:

select a.cfg_id||'##'||trim(a.backpath)||'##'||trim(b.machine_name)||'##'||trim(b.username)||'##'||trim(b.userpasswd)||'##'||trim(b.machine_type)

from moni_backinfo_cfg  a , moni_sys_machine b  where a.machine_id = b.machine_id  and sysdate - nvl(a.lastbacktime,sysdate-1) >= a.backcycle 

獲取數據後,用你的解密方法將密文密碼解密。

 

2:對於主機文件目錄/文件備份,我使用的是wget工具來進行的(還有其他的,看你自己的愛好和機器上裝了什麼了)。

wget ftp://${machine_name}/${backpath} --ftp-user=${username} --ftp-password=${userpasswd} -r -T 2 -t 1 -P ${thislocalpath}/data >>${WGETLOG} 2>&1

 

3:對於資料庫,我這裡只有oracle,就使用的是exp工具dump文件出來:

exp  ${username}/${userpasswd}@${machine_name} tables=${backpath} file=./${backpath}.dmp >>${DMPLOG} 2>&1

4:完成備份後,將備份壓縮打包,移動進分日期的備份目錄。

 

 

整體效果如下:

21_billxxx%cfg_bakfile.sh

20161222 備份開始

建立目錄 /data05/cfg_bakfile/20161222

開始備份 172.20.31.98:/app/billxxx/template

開始打包 172.20.31.98:template

結束備份 172.20.31.98:/app/billxxx/template

開始備份 ACCTDB_JF_OLDCRM:moni_sys_machine

開始打包 ./moni_sys_machine.dmp.tar.gz

結束備份 ACCTDB_JF_OLDCRM:moni_sys_machine

20161222 備份結束

 

21_billxxx%pwd

/data05/cfg_bakfile/20161222/ACCTDB_JF_OLDCRM

21_billxxx%ls

moni_sys_machine.dmp.tar.gz

 

另外,需要說明的是wget這個工具,因為使用的其實是ftp,對已經上鎖的文件沒法下載(比如計費的xfer配置文件),遇到這種情況,我的辦法是在主機上弄個crontab 先拷貝到別的目錄,再下載。不知道還有其他好辦法沒?

 

需要詳細腳本的可以留言獲取。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Hive是Hadoop生態中的一個重要組成部分,主要用於數據倉庫。前面的文章中我們已經搭建好了Hadoop的群集,下麵我們在這個群集上再搭建Hive的群集。 1.安裝MySQL 1.1安裝MySQL Server 在Ubuntu下麵安裝MySQL的Server很簡單,只需要運行: 系統會把MySQL ...
  • 沒用過IDEA工具,聽說跟Eclipse差不多,sbt在Idea其實就等於maven在Eclipse。Spark運行在JVM中,所以要在Idea下運行spark,就先要安裝JDK 1.8+ 然後加入Scala和Spark的依賴包就可以進行開發了,不要安裝低版本的JDK。 先下載Idea的社區版 ht ...
  • 原文地址:http://www.cnblogs.com/clownkings/p/4950865.html 解決辦法: 1、首先要備份好mdf文件,如果他沒了經理非吃了你不可。都不吐骨頭的。 2、在資料庫中新建一個需要附加同名的資料庫。例如【testdb】 3、停止SQL Server服務 4、找到... ...
  • 這個問題,原因是UTF-8編碼有可能是兩個、三個、四個位元組。Emoji表情或者某些特殊字元是4個位元組,而MySQL的utf8編碼最多3個位元組,所以數據插不進去。 我的解決方案是這樣的 1.在mysql的安裝目錄下找到my.ini,作如下修改: [mysqld] character-set-serve ...
  • 適用場景:用於判斷集合中元素,進一步縮小範圍。 Any 說明:用於判斷集合中是否有元素滿足某一條件;不延遲。(若條件為空,則集合只要不為空就返回True,否則為False)。有2種形式,分別為簡單形式和帶條件形式。 1.簡單形式: 僅返回沒有訂單的客戶: 生成SQL語句為: 2.帶條件形式: 僅返回 ...
  • 最近一直在折騰時序類型的資料庫,經過一段時間項目應用,覺得十分不錯。而Prometheus又是剛剛推出不久的開源方案,中文資料較少,所以打算寫一系列應用的實踐過程分享一下。 Prometheus 是什麼? Prometheus是一套開源的監控&報警&時間序列資料庫的組合,起始是由 "SoundClo ...
  • 維基百科的解釋中: 在操作系統領域中,孤兒進程指的是在其父進程執行完成或被終止 後仍繼續運行的一類進程。 在類UNIX系統中,僵屍進程是指完成執行(通過 exit 系統調用,或運行時發生致命錯誤或收到終止信號所致)但在操作系統的進程表中仍然有一個表項(進程式控制制塊PCB),處於"終止狀態 "的進程。 ...
  • 前言 由於領導捨不得花錢,只能辛苦我們自己搞個不花錢的證書。在網上找了一大堆各種配置證書服務的文章,在ios端運行的時候總是直接報錯,很是費解,後來註意到必須是TLS1.2或者更高的版本,而按照網上的配置弄好後都是ssl1.0,根本原因沒有解決。所以必須先升級伺服器ssl的版本,這個升級的文章很多, ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...