用途: 備份 MySQL 指定之多重資料庫.
特點:
1)以電子郵件方式作異地傳輸
2)系統環境須求簡單, 均為內建之基本服務
3)定時排程
4)支援以虛擬主機架設網站的一般用戶.
步驟一:
如果網站是架在自己的主機, 請以 root 身份操作, 若為租用的主機, 請以所屬的帳戶身份操作.
建立一個新目錄
#mkdir /usr/local/bin/bk_dir
#cd /usr/local/bin/bk_dir
將以下兩程式碼分別存成 backup.sh , email.pl
#cat backup.sh
代碼:
#!/bin/sh
#
# 說明:資料庫 MySQL 備份,並以 mail 附加檔案傳輸至指定郵件地址
# 撰寫人:alang (alangnet.24cc.com)
# 2003.6.7
#
# 檔案結構:
# backup.sh --> 備份執行檔
# data/ --> 備份檔儲存目錄
# email.pl --> 郵寄程式(主機需支援 perl)
#
#
#
# 參數定義 !!請自行修改!!
mainPath="/usr/local/bin/bk_dir"
db_user="dbuser"
db_pass="dbpass"
dataPath="${mainPath}/data"
archiveName="alangnet.ptez.org_bak.tgz"
#
#
#
# 資料庫轉出 mysqldump !!請自行修改!!
# 多重資料庫請依下列格式自行添加,備份檔名切勿重複
# mysqldump -u${db_user} -p${db_pass} --opt 資料庫名稱 > ${dataPath}/備份檔名.sql
#
mysqldump -u${db_user} -p${db_pass} --add-drop-table alangnet_nukeDB > ${dataPath}/nukedb.sql
mysqldump -u${db_user} -p${db_pass} --add-drop-table alangnet_phpbbDB > ${dataPath}/phpbbdb.sql
#
#
# 壓縮檔案並郵寄
#
#!!請自行修改!!
#tar -zcf 壓縮資料庫檔 資料庫檔1 資料庫檔2
cd ${dataPath}
tar -zcf ${archiveName} nukedb.sql phpbbdb.sql
cd ../
if [ -f ${dataPath}/${archiveName} ]; then
perl email.pl
echo "## The backup job was done. Time is $(date +%Y-%m-%d@%T) ##"
fi
#
#
# eof
#cat email.pl
代碼:
#!/usr/bin/perl -w
####################################
# Email message attachments in Perl#
# written by alang 2004.01.15 #
####################################
use MIME::Lite;
use Net::SMTP;
##!!請自行修改!!
my $SenderName = 'Administrator-alangnet'
my $WebsiteName = 'alangnet.ptez.org'
my $from_address = '
admin@alangnet.ptez.org'
my $to_address = '
alangnet@seed.net.tw'
my $subject = 'MySQL Backup Process Reporting! From ['.$WebsiteName.']'
my $filename = 'alangnet.ptez.org_bak.tgz'
my $recommended_filename = 'alangnet.ptez.org_bak.tgz'
my $msg = MIME::Lite->new(
From => $SenderName.' <'.$from_address.'>',
To => $to_address,
Subject => $subject,
Type => 'text/plain',
Data => "#############[ 此封郵件請勿回覆 ]#############
"
."管理員(".$SenderName.") 你好 ,
"
."您的網站(".$WebsiteName.")所屬的資料庫已完成備份作業,如附檔所示.
"
."請將它另存至其他位置並妥善保存.")
or die "Error creating MIME body: $!
";
# Attach the tar file
$msg->attach(Type=>'application/x-tar',
Path =>'data/'.$filename,
Filename =>$recommended_filename)
or die "Error attaching tar file: $!
";
my $message_body = $msg->as_string();
# Set this variable to your smtp server name
my $mailserver = 'localhost'
$smtp = Net::SMTP->new($mailserver) or
die "Couldn't connet server";
$smtp->mail( $from_address );
$smtp->to( $to_address );
$smtp->data();
$smtp->datasend($message_body);
$smtp->dataend();
$smtp->quit();
兩個程式檔均須依自身使用狀況適當修改不同的參數值, 唯須特別提醒的為:
backup.sh 的 archiveName 參數 須與 email.pl 的 $filename 參數相同.
步驟二:
賦予執行的權限
chmod 700 backup.sh email.pl
步驟三:
製作備份檔儲存目錄
#mkdir /usr/local/bin/bk_dir/data
完成及測試:
root 執行
#/usr/local/bin/bk_dir/backup.sh
收郵件查看
補充:
此程序已運行本站租用的虛擬主機多日, 期間曾發生的錯誤均修改完畢.
因使用電子郵件作傳輸媒介, 請以穩定性高, 容量大做接收郵箱