【问题标题】:back-up mysql database on java在java上备份mysql数据库
【发布时间】:2019-07-14 00:43:11
【问题描述】:

我尝试从我的 java 应用程序(使用 wamp 服务器)备份 mysql 数据库,但它不起作用,它总是显示消息“无法创建备份”。 这是我从这个线程中获取的代码: Backup a mysql [xampp] database in java

    public static void saveBdd(){
         String path = null;
         String user = "root";
         Process p = null;


         JFileChooser fc = new JFileChooser();
         fc.setDialogTitle("Choisir l'emplacement de la sauvegarde");
         fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
         fc.setAcceptAllFileFilterUsed(false);
         fc.showOpenDialog(startPage);
         String date = new SimpleDateFormat("dd-MM-yyyy").format(new Date());

        try {
            File f = fc.getSelectedFile();
            path = f.getAbsolutePath();
            path = path.replace('\\', '/');
            path = path+"/bcpbdd_"+date+".sql";


        } catch (Exception e) {
            e.printStackTrace();
        }
        try{
            Runtime runtime = Runtime.getRuntime();

            p=runtime.exec("C:/wamp64/bin/mysql/mysql5.7.23/bin/mysqldump -u " + user + " --add-drop-database -B bcpbdd -r "+path);

            int processComplete = p.waitFor();
            if (processComplete==0) {
                StartPage.afficheMessage("Backup Created Success!");
            } else {
                 StartPage.afficheMessage("Can't create backup.");
            }
        } catch (Exception e) {
            StartPage.afficheMessage(e.getMessage());
        }
    }

【问题讨论】:

  • 你的mysql有密码保护吗?如果是,您必须在命令中提供它,否则它将不起作用
  • 不,它不是(至少现在还不是),这就是我从命令行中删除 -ppassword 的原因。
  • 要排除故障,打印出您正在执行的实际命令,然后尝试从命令行手动执行它。 (我希望 mysqldump 能够解释问题所在)。或者,正如其他人已经建议的那样,打印出您的流程输出(请参阅stackoverflow.com/questions/8149828/…
  • 好的,我知道了:mysqldump: Got error: 1049: Base 'bdd/bcpbdd_20-02-2019.sql' inconnue when selection the database
  • 问题已解决,我的目标文件夹包含一个在命令行中被误解的空格,谢谢大家!

标签: java mysql wampserver


【解决方案1】:

这是我尝试过并且工作正常的方法,

  1. 有关 mysqldump 命令的更多信息:https://stackoverflow.com/a/13484728/2987755
  2. 您可以提供要在其中创建备份文件db_backup.sql 的任何路径。

    Process rt = Runtime.getRuntime().exec("mysqldump -P 3306 -h 127.0.0.1 -u root test");
    int exitCode = rt.waitFor();
    System.out.println("Process exited with : " + exitCode);
    BufferedReader in = new BufferedReader(new InputStreamReader(rt.getInputStream()));
    BufferedReader err = new BufferedReader(new InputStreamReader(rt.getErrorStream()));
    
    System.out.println("Backup file output:");
    String line;
    BufferedReader reader;
    if (exitCode != 0) {
        reader = err;
    } else {
        reader = in;
    }
    File file = new File("db_backup.sql");
    
    BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(file));
    while ((line = reader.readLine()) != null) {
        System.out.println(line);
        bufferedWriter.write(line);
        bufferedWriter.newLine();
    }
    bufferedWriter.flush();
    bufferedWriter.close();
    

【讨论】:

    【解决方案2】:

    您可以使用p.getErrorStream()p.getInputStream() 读取进程的输出 这应该在一个新线程中完成,然后您可以将输出写入日志文件或控制台。

    【讨论】:

    • 问题已解决,我的目标文件夹包含一个在命令行中被误解的空格,谢谢大家!
    猜你喜欢
    • 2012-06-11
    • 1970-01-01
    • 2018-05-21
    • 1970-01-01
    • 2011-04-18
    • 2012-01-06
    • 2018-08-20
    • 2011-11-10
    • 1970-01-01
    相关资源
    最近更新 更多