用shell腳本進行MySQL數據庫定時備份

Php
對任何一個已經上線的電子商務站點來說,數據備份都是必須的。無論版本更新還是服務器遷移,備份數據的重要性不言而喻。人工備份數據的方式不單耗費 大量時間和精力,還灰常不專業的說。於是,有瞭下面這段腳本的出現。參考瞭網上的很多教程,外加自己的測試,以下腳本經測試可用。 
 
    #!/bin/bash 
    #Shell Command For Backup MySQL Database Everyday Automatically By Crontab 
    #Author : Carlos Wong 
    #Date : 2012-03-17 
 
    #配置參數 
    USER=root #數據庫用戶名" >用戶名 
    PASSWORD=××××× #數據庫用戶密碼 
    DATABASE=TIENIUZAI    #數據庫名稱 
    WEBMASTER=tieniuzai@qq.com #管理員郵箱地址,用以發送備份失敗消息提醒 
    BACKUP_DIR=/var/www/Data_Backup/topons/ #備份文件存儲路徑 
    LOGFILE=/var/www/Data_Backup/topons/data_backup.log #日記文件路徑 
    DATE=`date ‘+%Y%m%d-%H%M’` #日期格式(作為文件名) 
    DUMPFILE=$DATE.sql #備份文件名 
    ARCHIVE=$DATE.sql.tgz #壓縮文件名 
    OPTIONS=”-u$USER -p$PASSWORD –opt –extended-insert=false –triggers=false -R –hex-blob –flush-logs –delete-master-logs -B $DATABASE”  #mysqldump 參數 詳情見幫助 mysqldump -help 
 
    #判斷備份文件存儲目錄是否存在,否則創建該目錄 
    if [ ! -d $BACKUP_DIR ] ; 
    then 
    mkdir -p “$BACKUP_DIR” 
    fi 
 
    #開始備份之前,將備份信息頭寫入日記文件 
    echo ” ” >> $LOGFILE 
    echo ” ” >> $LOGFILE 
    echo “———————————————–” >> $LOGFILE 
    echo “BACKUP DATE:” $(date +”%y-%m-%d %H:%M:%S”) >> $LOGFILE 
    echo “———————————————– ” >> $LOGFILE 
 
    #切換至備份目錄 
    cd $BACKUP_DIR 
    #使用mysqldump 命令備份制定數據庫,並以格式化的時間戳命名備份文件 
    mysqldump $OPTIONS > $DUMPFILE 
    #判斷數據庫備份是否成功 
    if [[ $? == 0 ]]; then 
    #創建備份文件的壓縮包 
    tar czvf $ARCHIVE $DUMPFILE >> $LOGFILE 2>&1 
    #輸入備份成功的消息到日記文件 
    echo “[$ARCHIVE] Backup Successful!” >> $LOGFILE 
    #刪除原始備份文件,隻需保 留數據庫備份文件的壓縮包即可 
    rm -f $DUMPFILE 
    else 
    echo “Database Backup Fail!” >> $LOGFILE 
 
    #備份失敗後向網站管理者發送郵件提醒,需要mailutils或者類似終端下發送郵件工具的支持 
    #mail -s “Database:$DATABASE Daily Backup Fail” $WEBMASTER 
    fi 
    #輸出備份過程結束的提醒消息 
    echo “Backup Process Done” 
 
使用: 
 
    將以上代碼保存到: /usr/sbin/DataBackup     (文件名隨意,隻要不跟系統原有的命令同名即可;代碼可以放到任何地方,放在sbin目錄下隻是為瞭方便執行,sbin目錄下的文件/目錄可在終端直接調 用,類似於windows下PATH變量指定的目錄) 
    為腳本添加可執行權限:  sudo chmod +x  /usr/sbin/DataBackup 
    執行腳本: sudo  DataBackup 
    如果需要定時執行備份命令的,隻需將下面這段代碼放到crontab 文件(sudo vim /etc/crontab)中去就可以瞭: 
 
    01 3 * * * root /usr/sbin/DataBackup    #它代表著將於每天3點執行DataBackup腳本 
 
小註意一下下: 
 
    linux 下的shell腳本定義變量的格式為:  key=value  ,註意他們兩者之間的” = “前後不能出現空格,否則系統無法確認該變量。 
    用紅色標註的那行,第一個類似單引號的字符”`”其實不是單引號,它的輸入鍵在鍵盤ESC鍵下方。 
    這個腳本隻適合用於一些小站點的備份,因為它是對數據庫進行全部備份而不是增量備份,不適合大容量的數據庫備份。 
 
Update: 
 
2012-03-17  :  由於服務器上的MySQL配置文件裡 的socket項值為 “/tmp/mysql.sock”, 而mysqldump在鏈接mysql server的時候會去查找位於/var/lib/mysql/目錄下的mysql.sock文件。如果沒有則會報錯: 
 
    mysqldump: Got error: 2002: Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ 
 
解決方法是:一是,修改mysql配置文件裡的socket項的值為  ’/var/lib/mysql/mysql.sock’,不過這種方法需要重啟mysql服務,很不厚道。 
 
二是,為/tmp/mysql.sock創建一個軟鏈接到/var/lib/mysql/mysql.sock: 
 
    ln  -s  /tmp/mysql.sock   /var/lib/mysql/mysql.sock 

作者 zhengdl126

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。