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