2011-11-23 77 views
3

我有一個struts 2(jsp)web應用程序與MySQL數據庫從jsp頁面數據庫備份

是否有可能採取來自jsp/java的數據庫備份頁面

以同樣的方式可以還原

請給我一些教程或提示..

我的實際需要是給一個訪問管理員收回和使用GUI自行恢復,而不從服務器訪問MySQL的。

在此先感謝..

+0

可以使CRUD(創建,讀取,更新,刪除)在數據庫中,但不知道通過編程語言JDBC API內恢復/備份 – GustyWind

+0

你using.for的MySQL的數據庫,你可以使用有工作臺它提供了一個操作備份嚮導和更好的用戶簡單的命令行。不要你可以創建CURD簡單的凝乳操作 –

回答

3

如果你正在使用MySQL,你可以這樣做

static int BUFFER = 10485760;  

public static String getData(String host, String port, String user, String password, String db) throws Exception { 

Process run = Runtime.getRuntime().exec(
      "C:\\Program Files\\MySQL\\MySQL Server 5.0\\bin\\mysqldump --host=" + host + " --port=" + port + 
      " --user=" + user + " --password=" + password + 
      " --compact --databases --add-drop-table --complete-insert --extended-insert " + 
      "--skip-comments --skip-triggers "+ db); 
InputStream in = run.getInputStream(); 
BufferedReader br = new BufferedReader(new InputStreamReader(in)); 
StringBuffer temp = new StringBuffer(); 
int count; 
char[] cbuf = new char[BUFFER]; 

while ((count = br.read(cbuf, 0, BUFFER)) != -1) 
     temp.append(cbuf, 0, count); 

br.close(); 
in.close(); 

return temp.toString(); 
} 

public static void main(String[] args) { 
byte[] data = BackupRestore.getData("localhost", "3306", 
    "root", "", "test").getBytes();  
File filedst = new File(path); 
FileOutputStream dest = new FileOutputStream(filedst); 
dest.write(data); 
} 

,但我相信,直到你沒有任何令人信服/花哨的理由這樣做更好的用戶命令行工具

您可以使用與MySQL一起發貨的GUI工具,測試更多且更易於使用。

String path="C:/datadump/db_backup.sql" 

確保路徑C:/datadump應該存在,或者您可以提供您所選擇的任何其他路徑。

+0

你做了非常棒的工作... 非常棒的想法... –

+0

如果你能解決這個問題,你可以標記答案爲 –

+0

這個結果將存儲在哪裏?它是否將以.sql格式? –

3

可以做到這一點,雖然它可能不是一個好主意。 MySQL邏輯備份是SQL,不需要對服務器內部進行任何訪問。您可以使用記錄的SQL界面進行備份。

  • 你可以得到的數據庫,表,視圖等從INFORMATION_SCHEMA列表,或來自show tables
  • 你可以從INFORMATION_SCHEMA表定義,或show create table
  • 你可以得到使用select * from table_name

當然表的內容,你可能失去了一些東西(你還記得觸發器,存儲過程,用戶定義d函數,...?)。即使你今天沒有遺漏任何東西,當你出現一個新的MySQL版本時,你很可能會錯過新的明天。

mysqldump應該是首選的,因爲MySQL的作者負責記住添加新的東西來備份它。你可以掏出來叫它;它的輸出(默認)是SQL。

恢復備份非常簡單;只需一個接一個地運行SQL語句。