自動備份數據庫腳本

自動備份數據庫

情景描述

因爲有很長時間沒有備份數據庫的數據,致使服務器癱瘓之後只能恢復到一個月前的數據,造成很多BookMark使用者的不便,所以決定寫一個腳本來實現如下的功能:

  • 定期備份數據庫(測試階段先定爲1小時)
  • 每次備份之後,將備份結果以郵件的方式通知管理員
  • 將備份的數據傳到七牛雲上

代碼實現

  • 發送郵件的代碼實現

    #!/bin/bash
    # sendmail.sh
    echo `echo $1` | mail -s "the information of dumping datebase.sql from igouc.com" -t [email protected] -a From:[email protected]
    
  • 定期備份數據庫代碼實現

    #!/bin/bash
    # dumpdatabases.sh
    
    echo "start dumpdatabases ......"
    
    datetime=`date +%s`
    
    while true 
    do
        nowdatetime=`date +%s`
        diffnum=$((nowdatetime - datetime))
        echo "nowdatetime=$nowdatetime; datetime=$datetime; diffnum=$diffnum "
        regunum=$((60*60))
        if [ $diffnum -ge $regunum  ]
        then
            echo "-------------- dump databases start -----------------"
            #打印日誌
            echo "----------- `date` -------------" | tee -a log.txt
            rm bookmark*
            rm myblog*
            bm_filename="bookmark_database_`date +%y%m%d%H%M%S`.sql"
            wb_filename="myblog_database_`date +%y%m%d%H%M%S`.sql"
    
            counter=0
    
            if  `/usr/bin/mysqldump -uroot -pxxxxxx(your mysql's password) bm > $bm_filename` 
            then
                ((counter++))
                #打印日誌
                echo "$bm_filename Dump Successed" | tee -a log.txt
            else
                #打印日誌
                echo "$bm_filename Dump Failed" | tee -a log.txt
            fi
    
            if  `/usr/bin/mysqldump -uroot -pgc wb > $wb_filename` 
            then            
                counter=$(($counter+6))
                #打印日誌
                echo "$wb_filename Dump Successed" | tee -a log.txt
            else
                #打印日誌
                echo "$wb_filename Dump Failed" | tee -a log.txt
            fi
    
            echo "-------------- dump databases end -----------------"
            datetime=$nowdatetime
    
            case $counter in
                0) ./sendmail.sh "Sorry: Full Backup Filed"
                    ;;
                6) ./sendmail.sh "Sorry: bookmark backup filed, myblog backup success: $wb_filename"
                    ;;
                1) ./sendmail.sh "Sorry: myblog backup filed, bookmark backup success: $bm_filename"
                    ;;
                7) ./sendmail.sh "Congratulations: All Backup Success, $wb_filename ; $bm_filename"
                    ;;
                *) ./sendmail.sh "ERROR: Programming Error"
                    ;;
            esac
    
        fi
        sleep 60
    done
    
    echo "dumpdatabases stop......"
    
  • 將數據庫備份文件上傳至七牛雲

    七牛給出了很清晰明瞭的文檔,這裏請大家自行查閱文檔。我這裏只給出了在Main函數裏新啓動線程並且定時上傳的代碼(定時時間爲1小時)

    public static void main(String[] args) {
            new Thread(){
                @Override
                public void run() {
                    while(true){
                        try {
                            System.out.println("開始上傳.....");
                            UploadDumpFile uploadDumpFile = new UploadDumpFile();
                            uploadDumpFile.upload();
                            System.out.println("上傳完成......");
                            this.sleep(1000*60*60);
                        } catch (Exception e) {
                            System.out.println("上傳失敗!");
                            e.printStackTrace();
                            break;
                        }
    
                    }
                }
            }.start();
        }
    

這樣,數據庫文件就會每隔一小時備份一次並且上傳到雲端。

如果您是python的使用者,那麼相信這種操作對您來說肯定是so easy

效果

手機收到郵件截圖

七牛

上傳到七牛的截圖

七牛

轉發請註明出處,謝謝合作GC博客

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章