0

これは、Javaからmysqlダンプを作成する方法です

public static boolean mysqlDump(String destination){
File back=new File("tempsdfsdf.fdr");
Runtime rt = Runtime.getRuntime();
FileWriter fw=null; 
try { 
    fw = new FileWriter(back); 
} 
catch (IOException ex) {
    return false;
} 
Process child; 
try {
    child = rt.exec("mysqldump -h"+generals.DATABASE_SERVER+" -u"+DATABASE_USER+" -p"+DATABASE_PASS+" --single-transaction --routines databasename -r"+destination);
    InputStream in = child.getInputStream(); 
    InputStreamReader xx = new InputStreamReader(in,"utf8"); 
    char[] chars=new char[1024]; 
    int ibyte=0; 
    while((ibyte=xx.read(chars))>0) 
    { 
    fw.write(chars); 
    } 
    fw.close(); 
    Utils.deleteFile(back);
} catch (IOException ex) {
    Logger.getLogger(FRMTestare.class.getName()).log(Level.SEVERE, null, ex);
    return false;
}
return true;

}

ダンプファイルは「宛先」ですが、別の脅威で圧縮できるように、脅威が終了したときに「宛先」ファイルが完全に作成されるように、ファイルへの InputStream() の書き込みをシミュレートする必要があります。とにかく、これは重要ではありません! 私の質問は、cmd でコマンドを実行するとトリガーがダンプされるのに、Runtime.exec を使用して同じコマンドを実行するとトリガーがダンプされない理由です。申し訳ありませんが、コードは混乱していますが、トリガーをダンプするように変更して一日中失いました。ありがとう!

4

2 に答える 2

0

mysqldump への引数が 2 つの異なる環境で実行するときに同じである場合、違いは使用しているユーザーの権限にあるはずです。

(mysqldump の実行中に別のウィンドウで SHOW PROCESSLIST を使用して) コマンドを実行するユーザーを確認すると、違いが示され、解決策への道が示されます: ユーザーを変更するか、使用しているユーザーの権限を変更します。

于 2013-01-30T14:34:21.223 に答える