请问大家,如何用jsp实现备份和还原mysql数据库,请给出代码实例,谢谢!

解决方案 »

  1.   

    MSSQL 的知道 MYSQL的不知道 
    MSSQL备份语句
    BACKUP  DATABASE  [数据库名称]  TO  DISK='存放路径文件名'  WITH  Format(完全备份)
    还原用 
    RESTORE DATABASE [数据库名称] FROM 
    期待答案ING
      

  2.   

    mysqldump databasename >路径 及名字 恢复使用<
    Runtime runtime = Runtime.getRuntime();
    runtime.exec("mysqldump table > d:/20070308.bak")
    不知道可以吗?
      

  3.   

    我说的是用jsp,以web方式进行备份和还原。这些在Mysql里执行的命令,我都会,就是不知道如何写在程序里
      

  4.   

    Runtime runtime = Runtime.getRuntime();
    runtime.exec("mysqldump table > d:/20070308.bak")
    这不是程序吗????你看不明白吗服了
      

  5.   

    你用的是什么版本啊,eclipse报错
      

  6.   

    package com.wanghe.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;
    import java.io.PrintWriter;import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.swing.JFileChooser;
    import javax.swing.UIManager;
    import javax.swing.filechooser.FileNameExtensionFilter;import com.wanghe.util.PropertiesValue;public class DatabaseServlet extends HttpServlet {
    String state; protected void service(HttpServletRequest request,
    HttpServletResponse response) throws ServletException, IOException {
    state = request.getParameter("state");
    PrintWriter out = response.getWriter();
    if (state.equals("backup")) { if (backup()) {
    out.print("true");
    } else {
    out.print("false");
    }
    out.close();
    } else if (state.equals("load")) {
    if (load()) {
    out.print("true");
    } else {
    out.print("false");
    }
    out.close();
    }
    } //mysql数据库备份
    public static boolean backup() {
    InputStream in = null;
    InputStreamReader isr = null;
    BufferedReader br = null;
    FileOutputStream fout = null;
    OutputStreamWriter writer = null;
    try {
    Runtime rt = Runtime.getRuntime();
    String mysql = "mysqldump -u " + PropertiesValue.DATABASE_USERNAME
    + " -p" + PropertiesValue.DATABASE_PASSWORD
    + " --set-charset=utf8 " + PropertiesValue.DATABASE;
    // 调用 mysql 的 cmd: 
    Process child = rt.exec("cmd /c "+mysql);// 设置导出编码为utf8。这里必须是utf8 
    // 把进程执行中的控制台输出信息写入.sql文件,即生成了备份文件。注:如果不对控制台信息进行读出,则会导致进程堵塞无法运行 
    in = child.getInputStream();// 控制台的输出信息作为输入流 
    isr = new InputStreamReader(in, "utf8");// 设置输出流编码为utf8。这里必须是utf8,否则从流中读入的是乱码 
    String inStr;
    StringBuffer sb = new StringBuffer("");
    String outStr;
    // 组合控制台输出信息字符串 
    br = new BufferedReader(isr);
    while ((inStr = br.readLine()) != null) {
    sb.append(inStr + "\r\n");
    }
    outStr = sb.toString();
    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    JFileChooser f = new JFileChooser();
    f.changeToParentDirectory();
    f.setDialogTitle("请选择保存数据库备份的位置");

    // 默认文件名
    f.setSelectedFile(new File("wanghe.sql"));
    int state = f.showSaveDialog(null);
    if (state == JFileChooser.CANCEL_OPTION) {
    return false;
    }
    if (state == JFileChooser.APPROVE_OPTION) {
    String backupPath = f.getSelectedFile().getAbsolutePath();
    // 要用来做导入用的sql目标文件:
    fout = new FileOutputStream(backupPath);
    writer = new OutputStreamWriter(fout, "utf8");
    writer.write(outStr);
    // 注:这里如果用缓冲方式写入文件的话,会导致中文乱码,用flush()方法则可以避免 
    writer.flush();
    return true;
    }
    } catch (Exception e) {
    e.printStackTrace();
    } finally {
    // 别忘记关闭输入输出流 
    try {
    if (br != null) {
    br.close();
    br = null;
    } if (in != null) {
    in.close();
    in = null;
    }
    if (fout != null) {
    fout.close();
    fout = null;
    }
    if (isr != null) {
    isr.close();
    isr = null;
    }
    if (writer != null) {
    writer.close();
    writer = null;
    }
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    return false; } //mysql数据库还原
    public static boolean load() {
    String strError = "";
    OutputStream out = null;
    BufferedReader br = null;
    OutputStreamWriter writer = null;
    try {
    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    String revertPath = null;
    JFileChooser fc = new JFileChooser();
    fc.changeToParentDirectory();
    fc.setDialogTitle("请选择数据库的备份文件");
    FileNameExtensionFilter filter = new FileNameExtensionFilter(
    ".sql", ".bak", "bak", "BAK", ".BAK", "sql");
    fc.setFileFilter(filter);
    int state = fc.showOpenDialog(null);
    if (state == JFileChooser.CANCEL_OPTION) {
    return false;
    } else if (state == JFileChooser.APPROVE_OPTION) {
    revertPath = fc.getSelectedFile().getAbsolutePath();
    }
    Runtime rt = Runtime.getRuntime();
    // 调用 mysql 的 cmd:   
    Process child = rt.exec("cmd /c "+"mysql -u"
    + PropertiesValue.DATABASE_USERNAME + " -p"
    + PropertiesValue.DATABASE_PASSWORD + " "
    + PropertiesValue.DATABASE);
    out = child.getOutputStream();//控制台的输入信息作为输出流   
    String inStr;
    StringBuffer sb = new StringBuffer("");
    String outStr;
    br = new BufferedReader(new InputStreamReader(new FileInputStream(
    revertPath), "utf8"));
    while ((inStr = br.readLine()) != null) {
    sb.append(inStr + "\r\n");
    }
    outStr = sb.toString();
    writer = new OutputStreamWriter(out, "utf8");
    writer.write(outStr);
    // 注:这里如果用缓冲方式写入文件的话,会导致中文乱码,用flush()方法则可以避免   
    writer.flush();
    strError = strError + "备份成功!<br>".getBytes("utf-8");
    return true;
    } catch (Exception e) {
    e.printStackTrace();
    strError = strError + "failure!<br>";
    return false;
    } finally {
    try {
    if (out != null) {
    out.close();
    out = null;
    }
    if (br != null) {
    br.close();
    br = null;
    }
    if (writer != null) {
    writer.close();
    writer = null;
    }
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    } public static void main(String[] args) {
    backup();
    }
    }