自動備份數據庫
情景描述
因爲有很長時間沒有備份數據庫的數據,致使服務器癱瘓之後只能恢復到一個月前的數據,造成很多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博客