请问一下牛人Java数据库项目中实现的数据库备份和恢复都是怎么做的,最好给个源码
在网上找了些,能备份,但都是调用exe(mysql用mysqldump)文件,但有些项目,服务器方根本不可能让我知道他的数据库安装路径,一般只有一个数据库连接地址
哪怎么取数据库的安装路径呢。怎么把数据库的bin找到呢。java里能把数据库的安装下的bin找出来吗

解决方案 »

  1.   

    import java.io.BufferedReader;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;import com.flexoa.web.util.Format;public class BackupDatabases { public static void backup(String sqlPath, String userName, String password,
    String dataName) {
    try {
    Runtime rt = Runtime.getRuntime(); // 调用MySql的 CMD:
    Process child = rt.exec(sqlPath + "mysqldump.exe" + " -u"
    + userName + " -p" + password + " -t " + dataName);
    // 设置导出编码为utf8。这里必须是utf8 // 把进程执行中的控制台输出信息写入.sql文件,即生成了备份文件。注:如果不对控制台信息进行读出,则会导致进程堵塞无法运行
    InputStream in = child.getInputStream();// 控制台的输出信息作为输入流 InputStreamReader xx = new InputStreamReader(in, "utf8");// 设置输出流编码为utf8。这里必须是utf8,否则从流中读入的是乱码 String inStr;
    StringBuffer sb = new StringBuffer("");
    String outStr;
    // 组合控制台输出信息字符串
    BufferedReader br = new BufferedReader(xx);
    while ((inStr = br.readLine()) != null) {
    sb.append(inStr + "\r\n");
    }
    outStr = sb.toString(); // 要用来做导入用的sql目标文件:
    String pk = "d:/" + dataName
    + Format.getDateFormatStr("yyMMddHHss") + ".sql";
    FileOutputStream fout = new FileOutputStream(pk);
    OutputStreamWriter writer = new OutputStreamWriter(fout, "utf8");
    writer.write(outStr);
    // 注:这里如果用缓冲方式写入文件的话,会导致中文乱码,用flush()方法则可以避免
    writer.flush(); // 别忘记关闭输入输出流
    in.close();
    xx.close();
    br.close();
    writer.close();
    fout.close();

    System.out.print("Backup -:" + dataName+ " > " + pk);
    System.err.println(" Success !"); } catch (Exception e) {
    e.printStackTrace();
    System.out.print("Backup -:" + dataName+ " > ");
    System.err.println(" Fail !");
    } } public static void main(String[] args) {
    String sqlPat = "D:/Java/MySQL 5.1/bin/";
    String userName = "root";
    String password = "068748";
    String dataName = "bbscs8";
    backup(sqlPat, userName, password, dataName);
    }}
      

  2.   

    这是一个备份成功的类,但要用这个类,必须取到 MySQL安装目录的Bin目录的绝对路径
    JAVA能取到这个路径吗。根据数据库的连接地址
      

  3.   

    用批处理,还可以做成双机备份。如下@echo off
    SET BACKUPDIR=d:\BACKUP
    CD /D %BACKUPDIR%SET D=%DATE:~0,10%echo %D%
    SET LOG=%BACKUPDIR%\backup.log
    SET USER=***
    SET PASS=***
    SET RAREXE=%BACKUPDIR%\rar.exe
    SET RARFILE=%USER%-%D%.rar
    SET DMPFILE=%USER%-%D%.dmp
    SET LOGFILE=%USER%-%D%.log
    SET BACKUPHOST=***
    SET BACKUPHOSTSHARE=e$
    SET BACKUPHOSTPATH=backup
    SET BACKUPUSERNAME=***
    SET BACKUPPASSWORD=***MD %D%
    CD %D%
    echo ---------------------------------------------------------------------------------->%LOG%
    echo [%DATE% %TIME%] backup start ......................... >> %LOG%echo [%DATE% %TIME%] backup %USER% >> %LOG%
    exp %USER%/%PASS% file=%DMPFILE% log=%LOGFILE%  BUFFER=10485760 >> %LOG%
    type %LOGFILE% >> %LOG% echo %DATE% %TIME% start rar >>%LOG%
    %RAREXE% a  -idp %RARFILE%  %DMPFILE% %LOGFILE% >>%LOG%
    DEL %DMPFILE% %LOGFILE%
    echo %DATE% %TIME% end rar >>%LOG%echo %DATE% %TIME% start connect backup host >>%LOG%
    net use \\%BACKUPHOST%\%BACKUPHOSTSHARE% %BACKUPUSERNAME% /USER:ACCOUNT\%BACKUPPASSWORD%  >>%LOG%
    echo %DATE% %TIME% mkdir >>%LOG%
    MKDIR \\%BACKUPHOST%\%BACKUPHOSTSHARE%\%BACKUPHOSTPATH%\%D% >>%LOG%
    echo %DATE% %TIME% copy file to  backup host >>%LOG%
    xcopy /Y %RARFILE%  \\%BACKUPHOST%\%BACKUPHOSTSHARE%\%BACKUPHOSTPATH%\%D%\ >>%LOG%echo [%DATE% %TIME%] backup end .......................>> %LOG%
    cd e:\backupSET D=
    SET LOG=
    SET BACKUPDIR=
    SET USER=
    SET PASS=
    SET RAREXE=
    SET RARFILE=
    SET DMPFILE=
    SET LOGFILE=
    SET BACKUPHOST=
    SET BACKUPHOSTSHARE=
    SET BACKUPHOSTPATH=REM exit 0