1. 程式人生 > >數據庫定時備份-服務器

數據庫定時備份-服務器

想象力 data 打包 出現 結構 cron src ase http

數據庫定時備份,圍繞兩樣東西展開,一個是shell程序(一般別人更願意叫shell腳本),一個是定時任務(crontab)。很簡單的一個小程序,shell負責導出數據庫,打包好,然後刪除沒用的,定時任務完全可以理解為,讓系統每隔多久執行一下的一個任務,這玩意就叫定時任務。下面分開說這兩樣東西,最後把定時備份這段也弄上來。

技術分享圖片

shell到底是什麽,該怎麽寫,我的理解是linux命令的集合,比如你想echo一個1,緊接著再寫一個echo 2,你需要1和2同時出現,這時你可以將echo1和echo2寫進shell腳本裏,執行這個腳本,腳本會將裏面的echo1和echo2當作一個命令集合來運行。

shell編程屬於一門語言,有變量,運算,和控制結構。在這裏就不講太詳細了,這些都是死的。shell的格式,.sh作為文件名後綴,文件開始聲明shell程序,#!/bin/bash,第二行開始寫程序。shell腳本可以通過兩種方式來運行,一種是直接選中當前文件,比如./test.sh,還有一種是調用解釋器來執行shell程序,比如 /bin/bash ./test.sh。shell程序裏應該都用絕對路徑,shell裏面有各種表達式如數學表達式大於小於的寫法和規範,還有U文件表達式的寫法如文件是否存在和規範,且還可以傳參數到shell腳本裏面使用,就像php裏的$_GET或$_POST一樣使用,還有各種系統變量。語言只是工具,語言的規範和各種表達式或插件或函數只是工具的用法,程序的好壞不取決於語言,而是取決於想象力。

定時任務更簡單了,crontab -e,表示增加一個定時任務,那定時任務怎麽寫呢,剛開始五個米字符,代表定時任務時間格式分時日月周,中間需要有空格,* * * * * 後面寫執行的命令,建議用第二種調用shell腳本的方式,可以避開權限的問題。*/1 * * * * 這個代表每分鐘執行一次。

#!/bin/bash#這裏是聲明這是個shell腳本用bin/bash來啟動

mydate=`date +%Y%m%d`#定義一個變量

mypath=/var/testcode#定義目錄路徑

mydatabase=test#定義數據庫的名字

expiration=`date -d "-7 day" +%Y%m%d`#定義七天前時間

mysqldump -uroot -p123456 $mydatabase > $mypath/$mydate.$mydatabase.sql

cd $mypath

tar czf $mypath/$mydate.$mydatabase.tar.gz $mydate.$mydatabase.sql

rm $mypath/$mydate.$mydatabase.sql

if [ -f $mypath/$expiration.tar.gz ]#判斷文件是否存在

then

rm -rf $mypath/$expiration.tar.gz

fi

以上是數據庫備份的shell程序,這個程序會將當天的數據庫備份打包,刪掉7天前的備份。crontab -e 新建定時任務,定好時間,比如這個可以每天淩晨4點鐘執行,可以寫成 * 4 * * * /bin/bash /var/testcode/a.sh。當然,定時任務對於phper來說更多的是定時運行某一些php腳本。其實都差不多。

數據庫定時備份-服務器