發新話題
打印

[轉貼]資料備份(Samba、Mysql)、加密

[轉貼]資料備份(Samba、Mysql)、加密

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 再存到別一台電腦上更好。多一份保障,

二、使用的程式

  1. 會設定 crontab , 這是管理人員必備的技巧。

  2. tar :備份的基本程式。

  3. find : 幫忙找出特定條件的檔案。(例:24小時內修改過的檔案)

  4. awk : 網管必備技巧,利害的就用 PREL,我只會用它。

  5. mysqldump : mysql傾印資料庫的指令。

三、實例說明

狀況一:

定期備份全校老師的檔案,以防老師誤刪檔案或目 錄,每天備份當日更動過的檔案(24小時內)。

資料目錄: /home/cses
備份檔存放目錄: /mnt/backup 

  1. 定期備份 (/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
  2. 每日備份( /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 中可能存放了好多個資料庫,日後也可能陸續增加,所以先建立一個所有資料庫的列表,備份的對象就是列表中的資料庫。

  1. 資料庫列表 (/mnt/backup/mysql/db.list)

    mysql
    test
    sfs
    horde
    imp
  2. 資料庫備份 ( /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 這個檔案加密的工具,以下就簡單的介紹安裝和使用方法:

  1. 安裝:
    和一般 *.TAR.GZ 的檔案一樣,下載、解開、進入目錄、make 、make install 。
    如裝完會產生兩個程式,
    keygen :先執行這個程式,它會在USER 的家目錄產生一個 .key 的檔案,加密、解密就靠這個檔的內容。
    crutf : 加、解密的主程式。
  2. 使用方法:
    keygen 要第一個使用。以產生 .key 。
    crutf :cruft infile outfile   或  cruft infile > outfile 的方式都可以,它會自動判斷是否加密,如果infile 是正常檔案,outfile 就是加密過的,反之則會產生解密的檔案。
  3. 心得:
    一般USER 加密過的檔案,連root 也無法解開,因為 ~/.key 的內容不一樣,也許把 user  ~/.key  cp 到 /root 就可以解開了。
    不僅是文字檔,連 *.tar.gz 的檔案也可以。

  這一類的檔案應該不少,我有點偷懶,只到 CNET 找,因為它有中文簡介,相信 http://freshmeat.net/   和 http://sourceforge.net/ 都有不少類似或更強大的工具,只是我沒找到而以,也希望網友可以提供意見。


TOP

發新話題