1. 程式人生 > >使用java實現自動備份mysql資料庫

使用java實現自動備份mysql資料庫

在實際應用中,定時備份資料庫是一件非常重要的工作,下面是關於利用java程式實現資料庫自動呼叫的方法,其實也不一定非要用java語言了,只要原理會了,大家大可使用其他語言來實現。話不多說,下面就來演示一下如何自動備份mysql下的abc資料庫

1,在java API中為我們提供了一個Runtime類,它可以用來呼叫一些程式,比如notepad.exe,cmd.exe...

具體怎麼回事,想了解的同學去看API吧,下面是實現程式碼:Backup.java

Java程式碼  收藏程式碼
  1. import java.util.Calendar;  
  2. import java.util.Date;  
  3. import java.text.SimpleDateFormat;  
  4. import java.io.IOException;  
  5. import java.io.PrintStream;  
  6. public class Backup   
  7. {  
  8.     public static void main(String[] args)   
  9.     {  
  10.         Runtime runtime = Runtime.getRuntime();  
  11.         Calendar calendar = Calendar.getInstance();  
  12.         SimpleDateFormat dateFormat = new
     SimpleDateFormat("yyyyMMdd_HHmmss");  
  13.         String currentTime = dateFormat.format(calendar.getTime());  
  14.         Process p = null;  
  15.         PrintStream print = null;  
  16.         StringBuilder buf = new StringBuilder();  
  17.         for(String a : args){  
  18.             buf.append(a);  
  19.             buf.append(" "
    );  
  20.         }  
  21.         String databases = buf.toString();  
  22.         try{  
  23.             p = runtime.exec("cmd /c mysqldump -uroot -p1234 -B "+databases+">"+currentTime+".sql.bak");  
  24.         }catch (IOException e){  
  25.             if( p != null ){  
  26.                 p.destroy();  
  27.             }  
  28.             try{  
  29.                 print = new PrintStream(currentTime+"_backup_err.log");  
  30.                 dateFormat.applyPattern("yyyy-MM-dd HH:mm:ss");  
  31.                 currentTime = dateFormat.format(calendar.getTime());  
  32.                 print.println(currentTime+"  backup failed.");  
  33.                 e.printStackTrace(print);  
  34.                 print.flush();  
  35.             }catch (IOException e2){  
  36.             }finally{  
  37.                 if(print!=null){  
  38.                     print.close();  
  39.                 }  
  40.             }  
  41.         }  
  42.     }  
  43. }  

2,將以上java程式編譯後得到Backup.class檔案;

 3,建立批處理檔案mytask.bat: 

Bat程式碼  收藏程式碼
  1. @echo off  
  2. cd c:\backup_wj  
  3. rem 這裡提倡使用絕度路徑,並且如果絕度路徑中有空格,記得用  
  4. rem 引號將路徑括起來!  
  5. rem 可以將abc替換為其他資料庫,多多個數據庫,並用空格隔開  
  6. "D:\Program Files\Java\jdk1.6.0_31\bin\java.exe" Backup abc  

 3.1:根據評論我又發現了一個新的方法,不需要使用java,直接寫一個批處理檔案就可以實現自動備份功能,讀者可以直接使用下面的批處理檔案代替原來的批處理檔案,不需要在使用java了,然後按照下面的步驟制訂計劃任務就可以了,程式碼如下:

Bat程式碼  收藏程式碼
  1. mysqldump -uroot -p1234 -B abc > %date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%.sql.bak  

4,將Backup.class、mytask.bat放到同一個目錄下,比如我就放在了c:\backup_wj目錄下

5,在win7下配置任務計劃,下面照著步驟一步一步走就行了:

5.1:在控制面板下找到“管理工具”——》“任務計劃程式”



 



 

5.2:選擇“任務計劃程式庫”——》“建立基本任務”


 

5.3:填寫任務名稱和描述



 

5.4:下面根據嚮導的描述操作就可以了;



 

 



 

5.5:點選“瀏覽”選擇批處理檔案“mytask.bat”;



 



 

 

 

 

5.6:點選“完成”後,選中autoBackup,點選“執行”測試一下:



 

是不是有一個黑視窗一閃而過,好的那麼開啟你存放backup.bat的目錄看一看,是不是生成了一個備份檔案呢?

下面是我的,不過我們的備份檔案已經生成了4次,從檔名就可以看出生成的時間。



 

那麼其中的原理大家都會了吧,其實就是讓我們的作業系統定時去執行一個批處理檔案“Backup.bat”,而這個批處理檔案會去執行一個.class檔案,這是一個java可執行檔案,它會呼叫runtime.exec()方法,在命令列下執行一段命令,這段命令就是備份資料庫的命令。

注意:對於備份的時間,我們可以設定得更加精細,通過“編輯觸發器”中的“重複任務間隔”我們可以精確到每5分鐘重複執行一次。具體怎麼設定大家可以根據實際情況來設定。