歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> 學習Linux >> 配置文件和配置表定期備份小工具,配置文件配置備份

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

日期:2017/3/3 17:59:35   编辑:學習Linux

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

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


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

設計的思路還是先把哪些機器的文件、哪個數據庫的表需要備份,放入數據庫中,然後弄一個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 先拷貝到別的目錄,再下載。不知道還有其他好辦法沒?

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

http://xxxxxx/Linuxjc/1181865.html TechArticle

Copyright © Linux教程網 All Rights Reserved