1. 程式人生 > >MySQL自動備份和手工恢復(可實現定時備份、保留最近7天、異地備份)

MySQL自動備份和手工恢復(可實現定時備份、保留最近7天、異地備份)

以下是windows下的批處理: 1set hour_str=%time:~0,2%
2if"%hour_str:~0,1%"==""set"hour_str=0%hour_str:~1%"3set fileName=%date:~0,4%-%date:~5,2%-%date:~8,2%_%hour_str%%time:~3,2%%time:~6,2%
4D:
5cd D:\autobak\6mysqldump 資料庫名(改我) -u root -p密碼(改我) >%fileName%.sql
7jar cf %fileName%.zip %fileName%.sql
8del %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等都有自己的自動備份機制,倒不是必須用這個。