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

来源: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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...