java - 使用 Java 命令行和 Mysqldump 创建 MySQL 数据库备份时出错

标签 java mysql

我在使用 MysqlDump 在 java 中创建 MySQL DB 备份时遇到了一个奇怪的问题。当我在 Windows 命令提示符中运行命令时,它可以轻松执行,没有任何问题并创建备份,但是当我从 java 应用程序执行命令时,我收到错误。 我的命令是

c:/xampp/mysql/bin/mysqldump -h localhost –-user root –-password=abc --add-drop-database -B db_WebBe -r db_test.sql

我收到 MySQL 用户的错误

mysqldump: Got error: 1044: Access denied for user ''@'localhost' to database '?-user' when selecting the database

我已经尝试了所有我能做的愚蠢的事情,包括

1) allow all the rights to ''@localhost
2) deleted user ''@localhost and then got error with 'jdbc'@localhost
3) Tried to Run Java Application with Administartor Rights (Stupid)
4) Some other codes from StackOverflow guides but all returned same error
5) Changed root password
6) Reinstalled, Updated ODBC and JDBC Drivers
6) and many others don't remember :-/

我的理解代码是

 public boolean databaseBackup() 
{
    try 
    {
        CreateConnection();
        Process runtimeProcess;
        runtimeProcess = Runtime.getRuntime().exec("c:/xampp/mysql/bin/mysqldump -h localhost –-user root –-password=abc --add-drop-database -B db_poonawala -r db_test.sql");
        BufferedReader stdInput = new BufferedReader(new 
             InputStreamReader(runtimeProcess.getInputStream()));

        BufferedReader stdError = new BufferedReader(new 
             InputStreamReader(runtimeProcess.getErrorStream()));

        String s=null;
        try {
            while ((s = stdInput.readLine()) != null) {
                System.out.println(s);
            }
        } catch (IOException ex) {
            Logger.getLogger(MainFrame.class.getName()).log(Level.SEVERE, null, ex);
        }

        try {
            while ((s = stdError.readLine()) != null) {
                System.out.println(s);
            }
        } catch (IOException ex) {
            Logger.getLogger(MainFrame.class.getName()).log(Level.SEVERE, null, ex);
        }
        int processComplete = runtimeProcess.waitFor();
        if (processComplete == 0) {
            System.out.println("5");

            System.out.println("Backed up");
            return true;
        } else {
            System.out.println("Not Backed up");
        }
        conn.close();
    } 
    catch (Exception ex) 
    {
            ex.printStackTrace();
    }
    return false;
}

最佳答案

我终于弄清楚了,现在我的工作代码是这样的。也许 future 的某个人可以从中受益。除了在 mysqldump 命令行期间之外,我只是在没有任何连接的情况下执行了代码。这可能是由于我在另一个连接仍然打开时使用 mysqldump 造成的。

try
{
    int processComplete; 
    Process runtimeProcess = Runtime.getRuntime().exec("C:\\xampp\\mysql\\bin\\mysqldump -u root -pabc db_Name -r D:/backup.sql");
    processComplete = runtimeProcess.waitFor();
    if(processComplete==1)
    {

        JOptionPane.showMessageDialog(null, "Backup Failed");
    }
    else if(processComplete==0)
    {
        JOptionPane.showMessageDialog(null,"\n Backup created Successfully.");
    }

}
catch(Exception e)
{
     JOptionPane.showMessageDialog(null,e);
}

关于java - 使用 Java 命令行和 Mysqldump 创建 MySQL 数据库备份时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19565578/

相关文章:

MySQL计算结果中所有地理位置之间的距离

mysql - 将 Angular 应用程序连接到服务器

java - Spring Hibernate Tomcat - 超时池为空

java - Android App : Log-in to website, 维护 session - Java

php - 2 MySQL查询不能组合?

java - 如何使用 hibernate 检索表的所有主键?

mysql - 异常捕获 : java. sql.SQLException:列计数与第 1 行的值计数不匹配

java - puppet "require"未按预期工作

java - 调试递归函数

java - Gson将字段反序列化为具有不同名称的变量,尽管具有带有字段名称的变量