java备份MySQL (windows linux)

来源:互联网 发布:淘宝买的基金如何赎回 编辑:程序博客网 时间:2024/05/22 04:45

java备份MySQL (windows linux)

Windows系统下:

1.“mysqldump --uroot --p123456 --opt”
2.“mysqldump --user=root --password=123456 --opt”


Linux系统下:
1.java.lang.Runtime.getRuntime().exec(new String[] { mysql });
2. java.lang.Runtime.getRuntime().exec(new String[] { "shell "+mysql });
3.java.lang.Runtime.getRuntime().exec(new String[] { "/bin/bash "+mysql });
4.java.lang.Runtime.getRuntime().exec(new String[] { "/bin/bash/shell "+mysql });
5.java.lang.Runtime.getRuntime().exec(new String[] { "sh", "-c", mysql });
前提是环境变量中都把MySQL的bin目录加上了。

下面请看完整代码:
public class BackUpMySQL {

    private static final String BASE_PATH_LINUX = "/root/";
    private static final String BASE_PATH_WINDEWS = "E://";

    public void backwindows() {
    try {
        String sqlname = BASE_PATH_WINDEWS + "mqney."
            + new OokjDate(new Date()).toString() + ".sql";
        String mysql = "mysqldump --user=root --password=123456 --opt mqney> "
            + sqlname;
        java.lang.Runtime.getRuntime().exec("cmd /c " + mysql);
    } catch (Exception e) {
        e.printStackTrace();
    }
    }

    public void backlinux() {
    try {
        String sqlname = BASE_PATH_LINUX + "mqney."
            + new OokjDate(new Date()).toString() + ".sql";
        String mysql = "mysqldump --user=root --password=123456 --opt mqney> "
            + sqlname;
        java.lang.Runtime.getRuntime().exec(
            new String[] { "sh", "-c", mysql });
    } catch (Exception e) {
        e.printStackTrace();
    }
    }
}
--------------------------------------------------------
[java] view plaincopy
  1. import java.io.BufferedReader;   
  2. import java.io.File;   
  3. import java.io.FileInputStream;   
  4. import java.io.FileOutputStream;   
  5. import java.io.InputStream;   
  6. import java.io.InputStreamReader;   
  7. import java.io.OutputStream;   
  8. import java.io.OutputStreamWriter;   
  9. import java.util.Date;  
  10.   
  11. public class BakMysql {   
  12. //main的方法,主要是我用于测试的,是想着取得CLASS的路径,然后备份的文件写在服务器的类路径下   
  13. public static void main(String[] args) {   
  14. BakMysql bk = new BakMysql();  
  15. //  System.out.println(Thread.currentThread().getContextClassLoader().getResource(""));       
  16. //  System.out.println(BakMysql.class.getClassLoader().getResource(""));    
  17. //  System.out.println(ClassLoader.getSystemResource(""));   
  18. //  System.out.println(BakMysql.class.getResource(""));          
  19. //  System.out.println(BakMysql.class.getResource("/")); //Class文件所在路径    
  20. //  System.out.println(new File("/").getAbsolutePath());          
  21.   System.out.println(System.getProperty("user.dir"));  
  22.   bk.backup();   
  23. //  bk.load();   
  24. //  bk.backupMySqlToFile();   
  25. }   
  26.   
  27. //backup方法是备份数据库到服务器地址   
  28.     public void backup() {  
  29.         try {   
  30.         String filePath = System.getProperty("user.dir") + "//"+new Date().getYear()+"-"+new Date().getMonth()+"-"+new Date().getDay()+".sql";//BakMysql.class.getResource("").toString();   
  31.         System.out.println();   
  32.             Runtime rt = Runtime.getRuntime();   
  33.             // 调用 mysql 的 cmd:   
  34.             Process child = rt.exec("D://Program Files//Apache Software Foundation//xampp//mysql//bin//mysqldump  -uroot -p1234 114la");  
  35.             // 设置导出编码为utf8。这里必须是utf8   
  36. //           注意这一句,是指运行mysqldump命令,后面跟的是登录名和登录的密码,接着后面的是指备份的数据库的名字,到此结束,以此生成一个执行的进程,取得此进程的输出流到我们要备份的文件   
  37.             // 把进程执行中的控制台输出信息写入.sql文件,即生成了备份文件。注:如果不对控制台信息进行读出,则会导致进程堵塞无法运行   
  38.             InputStream in = child.getInputStream();// 控制台的输出信息作为输入流   
  39.             InputStreamReader xx = new InputStreamReader(in, "utf8");// 设置输出流编码为utf8。这里必须是utf8,否则从流中读入的是乱码   
  40.             String inStr;   
  41.             StringBuffer sb = new StringBuffer("");   
  42.             String outStr;   
  43.             // 组合控制台输出信息字符串   
  44.             BufferedReader br = new BufferedReader(xx);   
  45.             while ((inStr = br.readLine()) != null) {   
  46.                 sb.append(inStr + "/r/n");   
  47.             }   
  48.             outStr = sb.toString();//备份出来的内容是一个字条串   
  49.              
  50.             // 要用来做导入用的sql目标文件:   
  51.             FileOutputStream fout = new FileOutputStream(filePath);   
  52.             OutputStreamWriter writer = new OutputStreamWriter(fout, "utf8");   
  53.             writer.write(outStr);//写文件   
  54.             // 注:这里如果用缓冲方式写入文件的话,会导致中文乱码,用flush()方法则可以避免   
  55.             writer.flush();   
  56.             // 别忘记关闭输入输出流   
  57.             in.close();   
  58.             xx.close();   
  59.             br.close();   
  60.             writer.close();   
  61.             fout.close();   
  62.             System.out.println("");   
  63.         } catch (Exception e) {   
  64.             e.printStackTrace();   
  65.         }   
  66.     }  
  67.     public String backupMySqlToFile() {   
  68.         String outStr = "";   
  69.         try {   
  70.             Runtime rt = Runtime.getRuntime();   
  71.                 Process child = rt.exec("D://Program Files//Apache Software Foundation//xampp//mysql//bin//mysqldump  -uroot -p1234 114la");  
  72.                 // 设置导出编码为utf8。这里必须是utf8在此要注意,有时会发生一个mysqldump:   
  73.                 //Got error: 1045的错误,此时mysqldump必须加上你要备份的数据库的IP地址,即  
  74.                 //mysqldump -h192.168.0.1 -uroot -pmysql dbname,今天我就遇到了这样的问题,呵呵               
  75.                 // 把进程执行中的控制台输出信息写入.sql文件,即生成了备份文件。  
  76.                 //注:如果不对控制台信息进行读出,则会导致进程堵塞无法运行   
  77.                 InputStream in = child.getInputStream();// 控制台的输出信息作为输入流   
  78.                 InputStreamReader xx = new InputStreamReader(in, "utf8");// 设置输出流编码为utf8。这里必须是utf8,否则从流中读入的是乱码   
  79.                 String inStr;   
  80.                 StringBuffer sb = new StringBuffer("");   
  81.                 // 组合控制台输出信息字符串   
  82.                 BufferedReader br = new BufferedReader(xx);   
  83.                 while ((inStr = br.readLine()) != null) {   
  84.                     sb.append(inStr + "/r/n");   
  85.                 }   
  86.                 outStr = sb.toString();   
  87.                 in.close();   
  88.                 xx.close();   
  89.                 br.close();   
  90.             } catch (Exception e) {   
  91.                 e.printStackTrace();   
  92.             }   
  93.             return outStr;   
  94.         }   
  95.          
  96.         public void load() {   
  97.             try {   
  98.                 String fPath = "c://test.sql";   
  99.                 Runtime rt = Runtime.getRuntime();   
  100.                 Process child = rt.exec("D://Program Files//Apache Software Foundation//xampp//mysql//bin//mysql -uroot -p1234 114la");   
  101.                 OutputStream out = child.getOutputStream();//控制台的输入信息作为输出流   
  102.                 String inStr;   
  103.                 StringBuffer sb = new StringBuffer("");   
  104.                 String outStr;   
  105.                 BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(fPath), "utf8"));   
  106.                 while ((inStr = br.readLine()) != null) {   
  107.                     sb.append(inStr + "/r/n");   
  108.                 }   
  109.                 outStr = sb.toString();   
  110.                 OutputStreamWriter writer = new OutputStreamWriter(out, "utf8");   
  111.                 writer.write(outStr);   
  112.                 // 注:这里如果用缓冲方式写入文件的话,会导致中文乱码,用flush()方法则可以避免   
  113.                 writer.flush();   
  114.                 out.close();   
  115.                 br.close();   
  116.                 writer.close();   
  117.             } catch (Exception e) {   
  118.                 e.printStackTrace();   
  119.             }   
  120.         }   
  121.     //当用户恢复数据的时候,直接传一个上传的文件给这个方法,就可以对数据库进行恢复了   
  122.         public void restoreMysqlFromFile(File f) {   
  123.             try {   
  124.                 FileInputStream fis = new FileInputStream(f);   
  125.                 Runtime rt = Runtime.getRuntime();   
  126.                 Process child = rt.exec("mysql -uroot -p1234 114la");//这里执行的是mysql命令,用户名,密码以及要恢复的数据库,命令执行完后会从我们上传的文件里面读取要执行的内容   
  127.                 OutputStream out = child.getOutputStream();//控制台的输入信息作为输出流   
  128.                 String inStr;   
  129.                 StringBuffer sb = new StringBuffer("");   
  130.                 String outStr;   
  131.                 BufferedReader br = new BufferedReader(new InputStreamReader(fis, "utf8"));   
  132.                 while ((inStr = br.readLine()) != null) {   
  133.                     sb.append(inStr + "/r/n");   
  134.                 }   
  135.                 outStr = sb.toString();   
  136.                 OutputStreamWriter writer = new OutputStreamWriter(out, "utf8");   
  137.                 writer.write(outStr);   
  138.                 // 注:这里如果用缓冲方式写入文件的话,会导致中文乱码,用flush()方法则可以避免   
  139.                 writer.flush();   
  140.                 out.close();   
  141.                 br.close();   
  142.                 writer.close();   
  143.                 fis.close();   
  144.             } catch (Exception e) {   
  145.                 e.printStackTrace();   
  146.             }   
  147.         }   
  148.     }   
0 0
原创粉丝点击