[轉帖]自動備份 MySQL 資料庫

Home Home
引用 | 編輯 pigpig5442
2005-05-16 04:44
樓主
推文 x0
用途: 備份 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


收郵件查看





補充:


此程序已運行本站租用的虛擬主機多日, 期間曾發生的錯誤均修改完畢.


因使用電子郵件作傳輸媒介, 請以穩定性高, 容量大做接收郵箱
 
     

獻花 x0
引用 | 編輯 jcle
2005-05-22 07:01
1樓
  
感謝大大分享.......
在目前動態網頁盛行的時代裡
資料庫的運用和備份非常的重要
感謝大大提供了備份的程式
造福大家
謝謝

獻花 x0
引用 | 編輯 mnbmnb5266
2010-08-28 00:59
2樓
  
謝謝大大了,自動備份真的很方便啊

獻花 x0