1. 程式人生 > >Linux下mysql定時備份及恢復

Linux下mysql定時備份及恢復

備份1.資料庫定時備份工作指令碼:(日期時間作為名稱的壓縮檔案,解壓開是sql指令碼)/root/backup/script/backup_mysql.sh2.備份輸出路徑:/root/backup/mysql3.執行計劃任務的命令:#crontab -e 開啟計劃任務編輯器#增加如下內容(指定於週日和週四00:00開始執行backup_mysql.sh備份指令碼)0 0 * * 0,4 /root/backup/script/backup_mysql.sh4.如果對庫新增了資料,也可以手動執行一次備份#登陸192.168.20.101,命令列下./root/backup/script/backup_mysql.sh  執行指令碼5.檔案生產在 /root/backup/mysql/年份日期時間.tar.gzbackup_mysql.sh指令碼內容:
  1. #========================start shell 指令碼============================  
  2. #!/bin/bash     
  3. #定義有備份的資料庫名   
  4. dbname=****    
  5. #定義備份資料庫時使用的使用者名稱和密碼   
  6. dbuser=****  
  7. dbpasswd=****    
  8. #資料庫備份的路徑   
  9. backuppath=/root/backup/mysql/   
  10. #資料庫備份日誌檔案儲存的路徑   
  11. logfile=/root/backup/log/mysql.log     
  12. #以當前的時間作為備份的資料庫命名。   
  13. dumpfile=$(date +%y%m%d%H%M)     
  14. #這個函式用來備份資料庫   
  15. back_db() {      
  16. #將備份的時間、資料庫名存入日誌      
  17. echo "------"$(date +%Y-%m-%d%t%A%t%T)" Beginning database "${dbname}" backup--------" >>${logfile}       
  18. #備份資料庫,如果有錯誤資訊也記入日誌。預設utf8編碼  
  19. #--skip-opt (mysql服務執行時備份,請加此引數,防止表損壞,mysqldump可選引數)  
  20. #--quick --force --routines --add-drop-database --add-drop-table  (儲存過程也會一起備份,mysqldump可選引數)  
  21. /usr/bin/mysqldump --skip-opt -u${dbuser} -p${dbpasswd} --default-character-set=utf8 --quick --force --routines --add-drop-database --add-drop-table ${dbname} >${backuppath}${dumpfile}.sql 2>> ${logfile}       
  22. #開始壓縮資料檔案     
  23. echo $(date +%Y-%m-%d%t%A%t%T)" Beginning zip ${backuppath}${dumpfile}.sql" >>${logfile}   
  24. #將備份資料庫檔案庫壓成ZIP檔案,並刪除先前的SQL檔案。如果有錯誤資訊也記入日誌。     
  25. tar zcvf ${dumpfile}.tar.gz ${dumpfile}.sql && rm ${dumpfile}.sql 2>> ${logfile}       
  26. #將壓縮後的檔名存入日誌。     
  27. echo "backup file name:"${dumpfile}".tar.gz" >>${logfile}     
  28. echo -e "-------"$(date +%Y-%m-%d%t%A%t%T)" Ending database "${dbname}" backup-------\n" >>${logfile}    
  29. }  
  30. #傳送郵件    
  31. #cat ${logfile} | mutt -s "Blog資料庫備份" -a ${dumpfile}.tar.gz [email protected] }     
  32. #這個函式用來刪除90天前的資料,注意,這個指令碼會刪除當前目錄下所有的早於七天前的檔案   
  33. rm_oldfile() {     
  34. #查找出當前目錄下90天前生成的檔案,並將之刪除     
  35. find /root/backup/mysql -type f -mtime +90 -exec rm {} \;   
  36. }     
  37. #切換到資料庫備份的目錄。如果不做這個操作,壓縮檔案時有可能會錯誤   
  38. cd ${backuppath}     
  39. #執行備份資料函式   
  40. back_db     
  41. #執行刪除檔案函式   
  42. rm_oldfile   
  43. #====================end shell 指令碼======================  

恢復1. 恢復備份的資料庫注:資料庫備份為"年份日期時間.tar.gz"的壓縮檔案,解壓後為sql檔案。如:201206271633.tar.gz :代表2012年06月27日16點33分.tar.gz#1 winscp 登陸mysql伺服器 取出/root/backup/mysql/下的最後備份的.tar.gz#2 解壓#3 使用資料庫管理工具navicat 新建一個“資料庫”,然後開啟,右鍵“表”,彈出選單選擇“執行批次任務檔案”匯入sql檔案,選擇utf8編碼,執行即可還原表結構資料(預設utf8編碼)。#test資料庫為測試資料庫,隨便匯入測試上面的指令碼可能因為多餘空格之類的原因無法執行,附上指令碼下載連結:點選此處下載******************************************************如果備份失敗,可能是由於目錄不可寫造成的mysql是以mysql使用者身份執行的,對/root/backup/mysql不可寫也會失敗
chmod 777 /root/backup/mysql 嘗試能否解決問題