現在維護的配置檔案/表都是人手工備份,上次某機器宕機,想在別的機器上拉起應用,去找備份的時候,發現最近的備份還是去年的,因此有了這個想法寫這麼乙個小工具才進行定期備份。其實細極思恐,每天備份一下還是很有必要的,出事了,也能找到是哪天開始的不是?
設計的思路還是先把哪些機器的檔案、哪個資料庫的表需要備份,放入資料庫中,然後弄乙個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://$/$ --ftp-user=$ --ftp-password=$ -r -t 2 -t 1 -p $/data >>$ 2>&1
3:對於資料庫,我這裡只有oracle,就使用的是exp工具dump檔案出來:
exp $/$@$ tables=$ file=./$.dmp >>$ 2>&1
4:完成備份後,將備份壓縮打包,移動進分日期的備份目錄。
整體效果如下:
21_bill***%cfg_bakfile.sh
20161222 備份開始
建立目錄 /data05/cfg_bakfile/20161222
開始打包 172.20.31.98:template
開始備份 acctdb_jf_oldcrm:moni_sys_machine
開始打包 ./moni_sys_machine.dmp.tar.gz
結束備份 acctdb_jf_oldcrm:moni_sys_machine
20161222 備份結束
21_bill***%pwd
/data05/cfg_bakfile/20161222/acctdb_jf_oldcrm
21_bill***%ls
moni_sys_machine.dmp.tar.gz
Centos網路配置小工具
之前在centos 6下編輯網絡卡,直接使用setup工具就可以了。但在新版的centos 7裡,setuptool已經沒有網路編輯元件了,取而代之的是networkmanager text user inte ce,即nmtui。nmtui預設隨系統標準安裝,如果你使用最小化安裝,可能沒有該軟體,...
備忘錄 環境配置與小工具類
以下是c語言的檔案頭配置,其他語言類似。配置檔案頭 func settitle if filetype c call setline 1,call setline 2,author xusongqi live.com call setline 3,call setline 4,created tim...
配置檔案讀取工具類
package io.flysium.framework.util 配置檔案讀取工具類 public final class propertiesutils param vmname 啟動應用是通過 d設定的引數名稱,如 confing path dubbo.protocol.port等 param...