用Java程式碼備份和還原MySQL資料庫
阿新 • • 發佈:2019-01-30
package com.liuzy.javaopen.servlet; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; public class Test { public static void main(String[] args) throws IOException{ backup("d:\\d.sql"); //recover("d:\\d.sql"); } public static void backup(String path) throws IOException{ Runtime runtime = Runtime.getRuntime(); //-u後面是使用者名稱,-p是密碼-p後面最好不要有空格,-family是資料庫的名字 Process process = runtime.exec("mysqldump -u root -pmysql goldenwing"); InputStream inputStream = process.getInputStream();//得到輸入流,寫成.sql檔案 InputStreamReader reader = new InputStreamReader(inputStream); BufferedReader br = new BufferedReader(reader); String s = null; StringBuffer sb = new StringBuffer(); while((s = br.readLine()) != null){ sb.append(s+"\r\n"); } s = sb.toString(); System.out.println(s); File file = new File(path); file.getParentFile().mkdirs(); FileOutputStream fileOutputStream = new FileOutputStream(file); fileOutputStream.write(s.getBytes()); fileOutputStream.close(); br.close(); reader.close(); inputStream.close(); } public static void recover(String path) throws IOException{ Runtime runtime = Runtime.getRuntime(); //-u後面是使用者名稱,-p是密碼-p後面最好不要有空格,-family是資料庫的名字,--default-character-set=utf8,這句話一定的加 //我就是因為這句話沒加導致程式執行成功,但是資料庫裡面的內容還是以前的內容,最好寫上完成的sql放到cmd中一執行才知道報錯了 //錯誤資訊: //mysql: Character set 'utf-8' is not a compiled character set and is not specified in the ' //C:\Program Files\MySQL\MySQL Server 5.5\share\charsets\Index.xml' file ERROR 2019 (HY000): Can't // initialize character set utf-8 (path: C:\Program Files\MySQL\MySQL Server 5.5\share\charsets\), //又是討人厭的編碼問題,在恢復的時候設定一下預設的編碼就可以了。 Process process = runtime.exec("mysql -u root -pmysql --default-character-set=utf8 goldenwing"); OutputStream outputStream = process.getOutputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(path))); String str = null; StringBuffer sb = new StringBuffer(); while((str = br.readLine()) != null){ sb.append(str+"\r\n"); } str = sb.toString(); System.out.println(str); OutputStreamWriter writer = new OutputStreamWriter(outputStream,"utf-8"); writer.write(str); writer.flush(); outputStream.close(); br.close(); writer.close(); } }