0

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: エラーが発生しました: 1044: データベースの選択時に、データベース '?-user' へのユーザー ''@'localhost' のアクセスが拒否されました

私は私ができるすべての愚かなことを試しました

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;
}
4

1 に答える 1

1

私はついに理解し、今私の作業コードはこれです。たぶん、将来誰かがこれによって恩恵を受けることができます。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);
}
于 2013-10-24T17:07:14.843 に答える