以下是windows下的批處理:
1
set hour_str=%time:~0,2%
2
if "%hour_str:~0,1%"==" " set "hour_str=0%hour_str:~1%"
3
set fileName=%date:~0,4%-%date:~5,2%-%date:~8,2%_%hour_str%%time:~3,2%%time:~6,2%
4
D:
5
cd D:\autobak\
6
mysqldump 數(shù)據(jù)庫名(改我) -u root -p密碼(改我) >%fileName%.sql
7
jar cf %fileName%.zip %fileName%.sql
8
del %fileName%.sql 使用前,需要保證環(huán)境變量的path中加入jar和mysqldump等路徑,批處理解釋如下:
1、前三句只是為了生成文件名,這里第2行:if "%hour_str:~0,1%"==" " set "hour_str=0%hour_str:~1%"是為了解決上午時,小時變成一位,導(dǎo)致文件名中包含一個空格,從而創(chuàng)建文件失敗的問題,即假設(shè)9點(diǎn)的時候,把“空格9”變成“09”。
2、第4、5行是為了切換到保存的目錄,也可以在第6、7行寫死,當(dāng)然,如果想自動獲取路徑也可以,用:
%~d0
cd %~dp0替換4、5行,可以自動放到當(dāng)前bat批處理所在盤的根目錄,適合懶人:)
3、第6行是導(dǎo)出數(shù)據(jù)庫為sql腳本,但這里不見得全庫導(dǎo)出,也可以只導(dǎo)某個表,具體命令就不說了。
4、第7行是用jar壓縮一下,由于導(dǎo)出的是文本,壓縮率是很高的,這樣很節(jié)省空間。(當(dāng)然也可以用zip、rar等,只是我搞java開發(fā),用習(xí)慣了jar。)
5、第8行是刪除未壓縮的文件,只保留壓縮后的zip包。
以上批處理創(chuàng)建后,在定時任務(wù)中添加一個任務(wù),定時執(zhí)行就可以了,我一般給一些小系統(tǒng)都設(shè)置從早上8點(diǎn)開始,每隔4個小時備份一次,然后執(zhí)行到晚上8點(diǎn)。另外,由于文件名都是基于時間的,那么很容易就可以實現(xiàn)保留最近7天、以及同時上傳到異地ftp服務(wù)器的功能,這些大家可以自由發(fā)揮。
linux、mac下應(yīng)該也都類似,大家自己寫個sh腳本就行了,至于mysql的恢復(fù),更加簡單,把sql解壓出來后,執(zhí)行:
mysql -u root -p密碼 數(shù)據(jù)庫名 <xxx.sql
這樣就可以自動還原回來,如果數(shù)據(jù)庫已經(jīng)存在,會自動覆蓋(也可能是增量,看導(dǎo)出的sql了)。
其實以上腳本其實也適合其它數(shù)據(jù)庫,只是sqlserver、db2等都有自己的自動備份機(jī)制,倒不是必須用這個。
posted on 2013-05-31 22:50
方偉的博客 閱讀(4247)
評論(4) 編輯 收藏 所屬分類:
數(shù)據(jù)庫