[FreeBSD]定期備份mysql檔案及刪除過期檔案

linux指令, 架設等
回覆文章
頭像
tim
文章: 1379
註冊時間: 2008年 11月 26日, 00:49

[FreeBSD]定期備份mysql檔案及刪除過期檔案

文章 tim »

利用 crontab 進行定期排程備份檔案, 程式如下:

代碼: 選擇全部

#!/bin/sh

for dbname in DATABASENAME1 DATABASENAME2 DATABASENAME3
do
  SQLFILE="/var/backup/$dbname-$(date +"%Y%m%d").sql"
  /usr/local/bin/mysqldump $dbname -u backupaccount -pbackuppassword > $SQLFILE 
done 

#delete 5 days files
/usr/bin/find /var/backup/ -name "*.sql" -mtime 5 -exec rm {} \;

其中 DATABASENAME1 .... 是資料庫名稱, 可同時放多個資料庫, 而使用 $(date +"%Y%m%d") 產生以日期變數, 合入備份檔名中, 最後利用 find 指令, 用來進行刪除指定時間前的過期備份檔, 如上例 -mtime 5 為剛好第 5天的檔案. 若要找出超過第 5天的檔案, 得使用 -mtime +5 這樣才可以, 另外這個 mtime 是指每 24小時為一天, 並不是用日期來比對, 要特別注意, 相關資料可以參考:
http://www.ssorc.tw/rewrite.php/read-939.html
http://note.tcc.edu.tw/548.html

ps 產生檔名如下
DATABASENAME1-20110213.sql
DATABASENAME2-20110213.sql
DATABASENAME3-20110213.sql
...

並將指令存成執行檔後, 再排入 crontab 中即可!
記得排入 crontab 中的指令, 都要給出完整路徑, 才不會在 cron 執行時發生找不到路徑而失敗的狀況!

參考資料: http://bash.cyberciti.biz/backup/backup ... -server-2/
最後由 tim 於 2011年 9月 7日, 14:43 編輯,總共編輯了 3 次。
多多留言, 整理文章, 把經驗累積下來.....
頭像
tim
文章: 1379
註冊時間: 2008年 11月 26日, 00:49

Re: [FreeBSD]定期備份mysql檔案及刪除過期檔案

文章 tim »

若要更高度自動化一點, 可以利用以下程式:

代碼: 選擇全部

#!/bin/sh

DBS="$(/usr/local/bin/mysql -u useraccount -puserpassword -Bse 'show databases')"
IGNOREDBS="mysql information_schema test"

for db in $DBS
do
  skipdb=-1
  for idb in $IGNOREDBS
  do
    if [ "$db" = "$idb" ]; then
      skipdb=1
    fi
  done
  if [ "$skipdb" = "-1" ]; then
    echo $db
    #run backup db
  fi
done

利用 mysql 的 show databases 列出 database 名稱列表, 再利用 IGNOREDBS 列出不要備份的系統資料庫, 即可將所有使用者資料庫一次備份出來.
多多留言, 整理文章, 把經驗累積下來.....
頭像
tim
文章: 1379
註冊時間: 2008年 11月 26日, 00:49

Re: [FreeBSD]定期備份mysql檔案及刪除過期檔案

文章 tim »

若要再加上定期備份打包 web 的檔案, 可以用類似的方式:

代碼: 選擇全部

#backup web
WEBFILE="/var/bak/web-$(date +"%Y%m%d").tar.gz"
/usr/bin/tar -zcv -f $WEBFILE /var/web

一樣就可以定期備份並利用 tar 打包壓縮產生備份檔案
多多留言, 整理文章, 把經驗累積下來.....
回覆文章