在java中备份一个mysql [xampp]数据库

Posted

技术标签:

【中文标题】在java中备份一个mysql [xampp]数据库【英文标题】:Backup a mysql [xampp] database in java 【发布时间】:2018-05-21 20:08:11 【问题描述】:

所以我还在学习编程,我正在创建一个可以备份数据库的简单应用程序,但问题是当我单击备份按钮时,没有任何反应,甚至没有显示“无法创建备份”。我正在使用 xampp,以防万一。我对它为什么不起作用的想法为零,我真的很好奇它背后的原因是什么,任何帮助将不胜感激。

...
String path = null;
String filename;

//choose where to backup

 private void jButtonLocationActionPerformed(java.awt.event.ActionEvent evt)                                            
    JFileChooser fc = new JFileChooser();
    fc.showOpenDialog(this);
    String date = new SimpleDateFormat("MM-dd-yyy").format(new Date());

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

     catch (Exception e) 
        e.printStackTrace();
    
 

//backup
private void jButtonBackUpActionPerformed(java.awt.event.ActionEvent evt)                                          
    Process p = null;


    try
        Runtime runtime = Runtime.getRuntime();

        p=runtime.exec("C:/xampp/mysq/bin/mysqldump -u root --add-drop-database -B capstone -r "+path);

        int processComplete = p.waitFor();
        if (processComplete==0) 
            jLabel1.setText("Backup Created Success!");
         else 
            jLabel1.setText("Can't create backup.");
        
     catch (Exception e) 

    


 

【问题讨论】:

您的操作似乎没有绑定任何东西... 【参考方案1】:

您在jButtonBackUpActionPerformed 中使用了try-catch 块,但catch 语句为空。因此,如果由于某种原因引发异常,则不会写入任何文件,也不会得到任何输出。您可以尝试使用e.printStackTrace() 就像在另一个按钮的catch 语句中一样进行调试。

【讨论】:

【参考方案2】:

感谢 stan,我找到了根本问题。这是一个错字的问题,而不是“mysql”,我放了“mysq”谢谢你们!

  java.io.IOException: Cannot run program "C:/xampp/mysq/bin/mysqldump.exe": CreateProcess error=2, The system cannot find the file specified

【讨论】:

【参考方案3】:

这将在 Linux 服务器上运行任何 shell 脚本。在 Windows 上测试它......应该也可以工作

 public static int executeExternalScript(String path) throws InterruptedException, IOException 

  ProcessBuilder procBuilder = new ProcessBuilder(path); 
  procBuilder.redirectErrorStream(true);
  Process process = procBuilder.start();
  BufferedReader brStdout = new BufferedReader(new InputStreamReader(process.getInputStream()));

  String line = null;
  while((line = brStdout.readLine()) != null)    logger.info(line);   
      int exitVal = process.waitFor();
      brStdout.close();
      return exitVal;

【讨论】:

以上是关于在java中备份一个mysql [xampp]数据库的主要内容,如果未能解决你的问题,请参考以下文章

从 Windows 10 中 XAMPP 中备份的“数据”文件夹中恢复 InnoDB 数据库

从数据文件夹备份中恢复 mysql 数据库

XAMPP MySQL 数据库复制

删除Xampp是否意味着删除数据库

升级到新版XAMPP后,从文件中恢复MySQL数据库

XAMPP卸载后恢复DB数据