作者 主題: [轉貼] Linux Application -- 利用VPN備份遠端內部電腦的資料  (閱讀 6801 次)

0 會員 與 1 訪客 正在閱讀本文。

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17403
    • 檢視個人資料
    • http://www.study-area.org
"衡山飛狐" <flyfox@bbs.openfind.com.tw> 撰寫於郵件 news:0BJFA3R$0001O6A$1@bbs.openfind.com.tw...
> Linux Application -- 利用VPN備份遠端內部電腦的資料 VADOC:03073004
> 作者:衡山飛狐 flyfox@virtualage.homelinux.net
>
> 一:【前言】
> 很早以前,我在公司的電腦文件要備存到家裡,常常得用ftp或mail或磁片或燒成光碟,麻煩的要死,不管怎麼做都是要手動,隨著在公司愈久,自己的業務資料愈來愈多也愈重要,將我的資料文件備份就成了一個很重要的課題,於是動了一個腦筋,嘿!這樣是不是也是異地備援方案呢?
> 二:【環境】
>
> 【公司環境】
> Linux Server 〔NAT,VPN Server端IP:192.168.0.1〕,公司Win電腦(內部IP:192.168.0.134 電腦名稱:wei)。
> 【家中環境】
> Linux Server 〔NAT,VPN Client端IP:192.168.1.2〕
>
> 三:【目的】
> 備份公司內部網路中wei電腦中的資料,由於公司內部網路雖可透過NAT連接InterNet,但由於是虛擬IP,所以無法由外界直接存取此台電腦的資料,但透過VPN所建立的雙邊通道,即可將遠端網路環境納入私有虛擬網路中,再透過Linux的Samba及Windows的資源分享,即可達到異地備援的目的。
>
> 四:【準備工具】
> 既然是備份,光是用tar來做似乎有點太簡單,在此提供一個備份的shell script:
> ---------------- begin bk.sh ---------------------------------------
>
> #!/bin/sh
> # 程式目的:將目錄或檔案依照日期來壓縮備份
> # 程式簡介:例如您想壓縮 aa 目錄,您可使用本程式,幫您把 aa 目錄
> # 壓縮成 aa20000807-01.tgz,如果已經存在 aa20000807-01.tgz
> # 則會以
> # aa20000807-2.tgz 為名,以此類推。本程式配合 crontab 的話,
> # 將可以很方便的備份您的資料,並且有自動刪除檔案的功能,
> # 不用讓您必須手動砍除舊的備份檔,所以不會浪費空間、
> # 浪費精力去維護,且可利用 email 回報狀態,讓您輕鬆省事。
> # 程式用法:請直接執行 ./bk.sh 見說明。
> # 安裝說明:請確定您的系統有 bash 並且位於 /bin/sh,如果不在此的話,
> # 請改本程式第一行,設定您 bash 的路徑,設定好後,
> # 再將本程式開啟可執行權限即可。
>
> # 初始值設定
> # pre_str 前置字串
> pre_str='';
> # 將所有參數存放在 allarg 變數
> allarg=$*
> # 設定 delmsg 變數:刪除檔案訊息
> delmsg='';
> # 記住目前路徑
> pwd=`pwd`;
>
> # 顯示程式用法的函數
> show_usage()
> {
> echo "使用格式: bk.sh [option] -p pre_str source target_dir";
> echo "option 可使用的參數有:";
> echo " -m email : 會自動寄報告到該 email。";
> echo " -p pre_str : 壓縮檔名的前置字串,區別用。";
> echo " -n numfile : 保留最新壓縮的幾個檔案,其餘自動刪除,";
> echo " numfile 需為數字。";
> echo "* source 代表欲備份的來源,可以是檔案名稱或是目錄名稱。";
> echo "* target_dir 代表壓縮檔的存放地,為一目錄名稱。";
> echo "* 一定要使用 -p 參數指定壓縮檔名的前置字串!";
> echo "* 可以使用多個 -m 來指定多個 email 來收取報告。";
> echo '* 壓縮檔名日期後的 "-" 符號所接的數字越小,表該壓縮檔為越新的!';
> echo "範例: bk.sh -p myhome -m flyfox@virtualage.homelinux.net -n 4 /home/flyfox /tmp";
> exit 1
> }
>
> # 參數不足兩個,則顯示語法,然後離開程式
> if [ "$#" -lt 2 ]
> then
> show_usage
> fi
>
> # 參數判斷
> # dayfile:代表會自動刪除超過 dayfile 天的備份檔。
> # numfile:代表會自動保留最近 numfile 個壓縮檔,其餘刪除。
> while [ $# -gt 0 ]
> do
> case $1 in
> -p) pre_str=$2;
> shift;
> shift;;
> -d) dayfile=$2;
> shift;
> shift;;
> -n) numfile=$2;
> if [ $numfile -le 0 ]
> then
> show_usage;
> fi
> shift;
> shift;;
> -m) email="$email $2";
> shift;
> shift;;
> *) source=$1;
> target_dir=$2;
> shift;
> shift;;
> esac
> done
>
> # 判斷 pre_str 變數是否為 null
> if [ -z $pre_str ]
> then
> show_usage
> fi
>
> # 判斷 source 變數是否為 null
> if [ -z $source ]
> then
> show_usage
> fi
>
> # 判斷 target_dir 變數是否為 null
> if [ -z $target_dir ]
> then
> show_usage
> fi
>
> # 判斷 target_dir 是存在否?不存在則強制離開。
> if ! [ -d $target_dir ]
> then
> echo "Sorry! $target_dir directory doesn't exist!"
> exit 1
> fi
>
> # 判斷 source 存在否?不存在則強制離開。
> if ! `test -e $source`
> then
> echo "Sorry! $source doesn't exist!"
> exit 1
> fi
>
> # 切換到 target_dir 目錄
> cd $target_dir
>
> # 取日期來當壓縮檔名。
> str_date=`date "+%Y%m%d"`;
> filename="$pre_str$str_date-01.tgz";
>
> # 判斷壓縮檔名是否重複,重複則另取新名。
> # num=1;
> while [ -f $filename ]
> do
> # 將其他的壓縮檔改名遞移
> for dd in `ls -1 $pre_str*.tgz | sort -r`
> do
> num=1;
> newname=$filename;
> while [ -f $newname ]
> do
> num=`expr $num + 1`;
> bb="printf(\"%02d\",$num);";
> aa=`perl -e $bb`;
> newname="$pre_str$str_date-$aa.tgz";
> done
> mv -f $dd $newname
> done
> filename="$pre_str$str_date-01.tgz";
> done
>
> # 開始壓縮
> echo "Starting compressing $source to $filename";
> tar zcfv $filename $source;
> echo "Compressing ok!";
>
> # 保留最新壓縮的幾個檔案,其餘刪除
> if ! [ -z $numfile ]
> then
> totalnum=`ls -t -1 $pre_str*.tgz | wc -l`;
> delfilenum=`expr $totalnum - $numfile`;
> if [ $delfilenum -ge 1 ]
> then
> for cc in `ls -t -1 $pre_str*.tgz | tail -$delfilenum`
> do
> rm -rf $cc;
> echo "del $cc";
> delmsg="`echo $delmsg`\ndel $cc";
> done
> fi
> fi
>
> # 利用 email 來報告
> if [ `echo $email | wc -c` -gt 1 ]
> then
> echo -e "`whoami`@`hostname` run bk.sh $allarg\n" > /tmp/bk.message;
> echo -e "File list:\n\n`ls -1 -t $pre_str*.tgz`\n" >> /tmp/bk.message;
> echo -e "Deleted file messages:\n$delmsg\n" >> /tmp/bk.message ;
> echo -e "Report file system disk space usage:\n\n`df`" >> /tmp/bk.message;
> for ee in $email
> do
> cat /tmp/bk.message | mail -s "`date "+%D %T"` Backup report" $ee
> done
> echo "Email to $email ok!";
> rm -rf /tmp/bk.message
> fi
>
> # 回到原路徑
> cd $pwd
>
> ---------------- end bk.sh ------------------------------------------
>
> 五:【實作】
> 1.cp bk.sh /usr/sbin
> 2.chmod 755 /usr/sbin/bk.sh
> 3.預先設定遠端內部電腦資源分享
> 4.vi /etc/hosts 定義192.168.1.134 wei
> 5.確定ping的到wei這台電腦(透過VPN)
> 6.mkdir /mnt/Remote_Disk
> 7.vi /usr/sbin/vpnbk
>
> -------------begin vpnbk--------------------------------------------
>
> mount -t smbfs -o username=wei,password=xxxx //wei/MYDOC /mnt/Remote_Disk
> /usr/sbin/bk.sh -p mydoc -m flyfox@virtualage.homelinux.net -n 7 /mnt/Remote_Disk /home/flyfox
> umount /mnt/Remote_Disk
>
> ------------end vpnbk----------------------------------------------
>
> 8.chmod 755 /usr/sbin/vpnbk
> 9.確定vpnbk能work後,利用crontab來定時備份。
>
> 六:【後記】
> 當然您也可以不壓縮,或壓縮後再解壓縮達成家裡資料與公司資料一致,變通的方式很多,自己應用吧。
>
> 文章出處:http://virtualage.homelinux.net/
>
>
> --
> ---
> 虛擬年代工作室
> http://virtualage.homelinux.net/
> Hot!!!免費email申請中!!!!
>

ikenny

  • 可愛的小學生
  • *
  • 文章數: 3
  • 性別: 男
    • 檢視個人資料
我的情況有點奇怪。
外部環璄 RedHat 7.3 + MySQL+VPN Server(PPTPD)
內部環境 Win2000Server+Apache+MySQL
請問我又如何做到相互backup部份MySQL資料庫?

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17403
    • 檢視個人資料
    • http://www.study-area.org