在UNIX系統中,為了使數據備份變得輕松、容易、安全,最好的辦法就是自動安排系統例行工作(系統調度),在系統空閒時間裡自動執行任務。如定期刪除一些流水文件、日志文件,定期完成數據的本地備份和異地備份等。這樣既發揮了UNIX系統的卓越功能,又減輕了系統管理員的工作量,使數據備份做到及時安全。
一、建立數據備份用戶 首先建立一個用戶,如:userbk,將該用戶的屬主、屬組設定為Informix,權限為755。在該用戶下存放備份的各種數據,以便統一備份到磁帶上或異地機器上。
二、用系統例行工作安排作業 UNIX系統有一個始終運行的守護進程,該進程可以在正常調度的間隙運行作業,用戶可以在一個文件中指定crontab命令運行任務,cron守護程序在初始化或該文件修改後自動讀取其內容。crontab文件中指定的各個域為:
分鐘 小時 月 日 星期幾 命令
如文件/usr/spool/cron/crontabs/root存放超級用戶調度的命令,內容為:
17 5 0 /etc/cleanup>/dev/null
0 2 0,4 /usr/lib/cron/logchecker
3 3 /usr/lib/cleantmp>/dev/null
1 3 /etc/setclk-rd1800>/dev/null 2>&1
#5 18 1-5/usr/lib/sa/sa2 -s 8:00 -e 18:01-i 1200-A
0 4 0 /etc/custom -V symlinks;#CUSTOM -SYMLINK -REPORT
0 0 1-5 scosh cronsched-r
0 01 scosh cronsched-wr
第一行的作用是在每周星期日5:17執行/etc/cleanup來清除系統上的某些日志文件。第二行的作用是每周星期日和星期四2:00執行/usr/lib/cron/logchecker來檢查守護進程cron的日志文件。第三行為每天3:03運行/usr/lib/cheantmp命令清除指定目錄中的臨時文件等。
用戶可以用命令crontab -u root -e來編輯此文件,在文件最後加入一行內容:
0 3 kill-user
此行內容為每天3:00運行kill-user,此命令文件的任務是終止某些用戶的進程。
同樣,用命令crontab-u userbk -e來編輯userbk文件,安排userbk用戶的作業任務,內容如下:
10 3 bdbf
30 5 0 ftp -inv
ydbf.log
0 2 1 rm .log
第一行內容為每天3:10運行bdbf程序,使數據備份至/usr/userbk目錄下, 並拷貝到磁帶上。第二行內容為每周星期日5:30運行ydbf程序,將備份至/usr/userbk目錄下的數據通過網絡傳送到異地機器上存貯,並將備份信息寫入 ydbf.log日志文件中。第三行內容為每月1日2:00刪除/usr/userbk下的日志文件。
三、本地數據備份
筆者使用的操作平台為SCO Openserver5.04系統,數據庫為Informix4.0和Informix-Online7.3兩種版本。在Informix4.0上使用的業務有“人身保險”(用戶名rsbx)、“子女備用金保險”(用戶名zbbx)等。數據以字符串形式保存在各自的目錄下,備份時可用tar命令或cpio命令將整個用戶目錄備份即可。而在Informix-Online7.3上應用的有“綜合處理系統”(用戶名c4g1,庫名picc2.dbs),“會計記帳系統”(用戶名為claf,庫名account.dbs)等,數據存放在Online指定的設備上,平時采用ontape -s命令備份,但由於此命令實現自動備份較困難,並且不能和其它數據備份到一盤磁帶上,會造成備份介質的浪費。所以最好采用 dbexport命令備份數據。運行dbexport命令的前提是調用數據庫的相關用戶必須退出,一旦有一個應用點沒有退出,備份就會失敗。為了確保數據的安全備份,需編制一個終止進程的命令文件,即前述中由超級用戶調度的kill-user程序。
程序1:/usr/bin/kill-user
ps -u rsbx >tmp-a
ps -u zbbx >>tmp-a
ps -u c4gl >>tmp-a
ps -u claf >>tmp-a
cut -cl-6 tmp-a >tmp-b
while read a
do
kill-9 $a
echo “kill alread$a”|cat>>/tmp/kill-user.log
done rm tmp-a tmp-b
程序前5行為列用戶進程,並將所要終止的進程存放至/tmp/K-user2文件中,後面的循環語句是殺死進程,並將運行信息存放至/tmp/kill-user.log日志文件中,以備查閱。此程序放在“/”下或“/usr/bin”下。
程序2:/usr/user/bdbf 本地數據備份程序
INFORMIXDIR=/user/informix
PATH=$PATH:$HOME/bin:.:$INFORMIXDIR
/bin
INFORMIXSERVER=cbps-shm
ONCONFIG=onconfig.cbps
export PATH MAIL INFORMIXDIR INFORMIXSERVER ONCONFIG
rm -r .Z
find /usr/rsbx |cpio-oacvB>RSBX;compress RSBX
find /usr/zbbx |cpio-oacvB>ZBBX;compress ZBBX
…
rm-r.exp
dbexport -c picc2 -ss
find ./picc2.exp | cpio-oacvB>PICC2;compress PICC2
dbexport -c account -ss
find ./account.exp | cpio-oacvB>ACCOUNT;compress ACCOUNT
…
sleep 10
tar c8v .Z
date | cat>>userbk.log
echo“PICC2 ACCOUNT RSBX ZBBX...backup over”|cat>>userbk.log
程序中所設置的環境變量同Informix用戶的環境變量設置一樣,所有需要備份的數據用歸檔命令cpio拷貝至/usr/userbk目錄下,用戶可根據自已的實際情況自行添加,然後用tar命令統一將所有文件拷貝至磁帶上,最後將備份信息寫到日志文件userbk.log中,這樣系統管理員只需每天早晨上班後檢查一下是否備份好,然後更換一般磁帶即可。
四、異地數據備份
熟悉網絡的人都知道FTP的功能十分強大,它主要用於網絡之間的文件傳輸。一般情況下,用戶傳輸多個文件時,需登錄服務器逐一傳輸,只有等待一個文件傳送完畢之後才能傳輸下一個,這樣用戶需花很長時間守候在終端前等待一個文件傳輸結束。為了簡化工作,在UNIX平台上FTP支持非在線傳輸,即用戶只需把要輸入的命令逐條寫進shell腳本,FTP傳輸文件時調用腳本即可,例:對上述/usr/userbk目錄下的數據文件的異地備份,可用如下腳本來完成。
程序3:/usr/userbk/ydbf
open hostgs
user mybackup mypasswd
mpt .Z
bye
程序中的hostgs為異地的主機名。該主機名需在本地主機/etc/hosts文件中定義。mybackup、mypasswd是異地主機中為備份數據而建立的用戶名和口令字,當系統例行程序調用此程序時,可將數據全部備份至異地的hostgs主機中mybackup用戶下。
五、數據恢復
本地備份到磁帶上的數據可用tar x8v命令將數據文件拷貝到/usr/userbk目錄下。異地備份的數據可用FTP命令傳輸至該目錄下,或者直接用/usr/userbk目錄下的數據,用uncompress.Z解壓。
對於Informix4.0版以字符串形式存放的數據,可直接用cpio命令來恢復。如:rsbx用戶數據可用如下命令來恢復:
cpio -icduvB < RSBX
對於Informix-Online的數據恢復,需采用如下方法。如對picc2數據庫的恢復可用如下命令來恢復:
cpio -icduvB < PICC2
dbimport picc2 -d workdbs
其中,workdbs為Online建立的數據空間,須注意的是恢復數據庫時,原數據庫必須刪除。