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 的参数在您在两个不同的环境中运行时相同,则差异必须在您使用的用户的权限上。

检查命令以哪个用户身份运行(通过在 mysqldumps 运行时在另一个窗口中使用 SHOW PROCESSLIST),这应该显示差异并指出解决方案的方法:更改用户或更改您正在使用的用户的权限。

于 2013-01-30T14:34:21.223 回答
0

您明确使用的方式--routines也相同 try --triggers。您可能会看到差异,因为在您的 shell 中发现和处理各种默认文件的方式与在 JDK 中不同。可能不值得努力追踪它。显式--triggers应该工作。

于 2013-07-10T19:39:45.557 回答