http://www.cses.tcc.edu.tw/~chihwu/backup_data.htm
資料備份(Samba、Mysql)、加密
一、前言
用Linux 或 FreeBSD架設了
SMABA ,當作 FILE SERVER ,也弄了 Mysql來存放一些資料,接踵而來的就是備份的問題。最簡單最直接的方法,每天晚上把整個目錄
tar
起來,那就解決了,這種做法的確很安全,但是資料量大時就不適用了。而且存放的空間也是需要考量的。
本校沒有磁帶機、也沒有MO,還好有40GB 的
IDE
HD,這就是備份下來檔案的儲存地方。除了本機上存放外,利用
NFS 或 FTP 再存到別一台電腦上更好。多一份保障,
二、使用的程式
-
會設定 crontab , 這是管理人員必備的技巧。
-
tar :備份的基本程式。
-
find : 幫忙找出特定條件的檔案。(例:24小時內修改過的檔案)
-
awk : 網管必備技巧,利害的就用 PREL,我只會用它。
-
mysqldump : mysql傾印資料庫的指令。
三、實例說明
狀況一:
定期備份全校老師的檔案,以防老師誤刪檔案或目
錄,每天備份當日更動過的檔案(24小時內)。
資料目錄: /home/cses
備份檔存放目錄: /mnt/backup
-
定期備份 (/mnt/backup/backup_week.sh)
#!/bin/sh
##
## 保留三個/home/cses/ 的原始備份檔
##
mv /mnt/backup/cses-1.tar.gz /mnt/backup/cses-2.tar.gz
mv /mnt/backup/cses.tar.gz /mnt/backup/cses-1.tar.gz
tar czvf /mnt/backup/cses.tar.gz /home/cses
chmod 400 /mnt/backup/cses.tar.gz
---------------------說明--------------------
其實倒數第二行就可以解決了,還好硬碟夠大,我就多放兩個完整備份檔,crontab
中設定每個星期天的凌晨4:30做備份的動作。chmod
為的是讓其他人不會讀取到這個檔案。
30 4 * * 0 /mnt/backup/backup_week.sh |
-
每日備份( /mnt/backup/backup_day.sh )
#!/bin/sh
##
## 每天備份24小時內更動過的檔案
##
day=`date +%w`
find /home/cses/ -type f -ctime -1 -fprint
/mnt/backup/file_list
tar -czvf /mnt/backup/week-$day.tar.gz -T
/mnt/backup/file_list
---------說明 -----------
因為是每天,所以用 data +%w 取出星期代碼,
用find 指令找出一天內(24小時)更動過的檔案。並且用-fprint
參數輸出到 /mnt/backup/file_list
以 /mnt/backup/file_list 為範本,把檔案 tar 到 week-星期.tar.gz
的檔案中,crontab 設定
0 4 * * * /mnt/backup/backup_day.sh |
如此一來,每週一次完整的備份,每天備份24小時內的異動,萬一有同事誤刪了檔案或目錄就可以很快的救回來了。
狀況二、備份 資料庫
其實這個部份和備份檔案差不多,以MySQL 為例,它本身所附的mysqldump
就可以把資料庫整個匯出,而匯出的內容都是文字檔,所以在檔案權限上的設定或者內容的加密都是要注意的。
在MYSQL
中可能存放了好多個資料庫,日後也可能陸續增加,所以先建立一個所有資料庫的列表,備份的對象就是列表中的資料庫。
-
資料庫列表 (/mnt/backup/mysql/db.list)
-
資料庫備份 ( /mnt/backup/backup_sql.sh)
#!/bin/sh
date=`date +%w`
awk '{ print "mysqldump -uroot -proot_password
" $1 "
>
/mnt/backup/mysql/"$1".sql.`date
+%w`"
}' /mnt/backup/mysql/db.list | /bin/sh
awk '{ print "chmod 400
/mnt/backup/mysql/"$1".sql.`date
+%w`"
}' /mnt/backup/mysql/db.list | /bin/sh
----------------說明----------------------
以上的程式是四行! 第三、四行都是以awk
為開頭,如果怕程式有錯,後面的 | /bin/sh
可以先省略,先看看有沒有錯誤,這時候因為沒有經過shell
處理,所以 `date +%w`
也不會被執行,仍是以字串的格式呈現。如下:
mysqldump -uroot mysql > /var/lib/mysql/mysql.sql.`date
+%w`
mysqldump -uroot test > /var/lib/mysql/test.sql.`date
+%w`
chmod 400 /var/lib/mysql/mysql.sql.`date +%w`
chmod 400 /var/lib/mysql/test.sql.`date +%w`
會用 chmod 400 這行指令是為了保密,資料庫 DUMP
出來都是文字檔,小心一點總是必要的,另外,這個程式也是要保密的對象,因為它有
MYSQL root 的密碼,在我的實際運作上,/mnt/backup
的擁有者是 root , 屬性方面也是設成400,除了只讓 root
可以讀寫外,其他群組或人員一律不準。
|
狀況三:檔案加密
上述的script
和備份下來的資料應妥善保管,避免他人的下載或利用,在
WINDOWS 的環境中,WINZIP 這類的壓縮工具都有
加上密碼的功能,以防檔案遭到非法利用;但在 UNIX
環境中,這類的軟體好像不多(應該說我不知道),還好,我在
CNET 網站找到Cruft
Data Encryption Utility
這個檔案加密的工具,以下就簡單的介紹安裝和使用方法:
- 安裝:
和一般 *.TAR.GZ 的檔案一樣,下載、解開、進入目錄、make
、make install 。
如裝完會產生兩個程式,
keygen :先執行這個程式,它會在USER 的家目錄產生一個 .key
的檔案,加密、解密就靠這個檔的內容。
crutf : 加、解密的主程式。 - 使用方法:
keygen 要第一個使用。以產生 .key 。
crutf :cruft infile
outfile 或
cruft infile >
outfile
的方式都可以,它會自動判斷是否加密,如果infile
是正常檔案,outfile
就是加密過的,反之則會產生解密的檔案。 - 心得:
一般USER 加密過的檔案,連root 也無法解開,因為 ~/.key
的內容不一樣,也許把 user ~/.key cp 到 /root
就可以解開了。
不僅是文字檔,連 *.tar.gz 的檔案也可以。
這一類的檔案應該不少,我有點偷懶,只到
CNET
找,因為它有中文簡介,相信 http://freshmeat.net/
和 http://sourceforge.net/
都有不少類似或更強大的工具,只是我沒找到而以,也希望網友可以提供意見。