When I try to run mysqldump ...
(all the missing parameters are correct for me) in a Heroku worker dyno with ClearDB support, I get this error message
SEVERE: null
9-09-01T13:16:14.618354+00:00 app[worker.1]: java.io.IOException: Cannot run program "mysqldump": error=2, No such file or directory
2019-09-01T13:16:14.618356+00:00 app[worker.1]: at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
2019-09-01T13:16:14.618358+00:00 app[worker.1]: at fi.vakuutustiedot.workers.threads.MySQLDatabaseDumpThread.yeah(MySQLDatabaseDumpThread.java:192)
2019-09-01T13:16:14.618360+00:00 app[worker.1]: at fi.vakuutustiedot.workers.threads.MySQLDatabaseDumpThread.run(MySQLDatabaseDumpThread.java:44)
2019-09-01T13:16:14.618362+00:00 app[worker.1]: Caused by: java.io.IOException: error=2, No such file or directory
2019-09-01T13:16:14.618363+00:00 app[worker.1]: at java.lang.UNIXProcess.forkAndExec(Native Method)
2019-09-01T13:16:14.618365+00:00 app[worker.1]: at java.lang.UNIXProcess.<init>(UNIXProcess.java:247)
2019-09-01T13:16:14.618366+00:00 app[worker.1]: at java.lang.ProcessImpl.start(ProcessImpl.java:134)
2019-09-01T13:16:14.618367+00:00 app[worker.1]: at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
2019-09-01T13:16:14.618368+00:00 app[worker.1]: ... 2 more
2019-09-01T13:16:14.618370+00:00 app[worker.1]:
My question is: is there a workaround for the missing mysqldump
?
PS: my Java code calling mysqldump
is as follows:
private static void dumpDatabase() throws InterruptedException, IOException {
String envvar = System.getenv("CLEARDB_DATABASE_URL");
String[] vars = envvar.split(":");
String userName = vars[1].substring(2);
String password = vars[2].substring(0, vars[2].lastIndexOf('@'));
String hostName = vars[2].substring(vars[2].lastIndexOf('@') + 1,
vars[2].lastIndexOf('/'));
String database = vars[2].substring(vars[2].lastIndexOf('/') + 1,
vars[2].lastIndexOf('?'));
String cmd = String.format(COMMAND_FORMAT,
hostName,
userName,
password,
database);
System.out.println(">>> Dump command: " + cmd + " <<<");
String[] cmds = cmd.split("\\s+");
String databaseDumpFileName = DATE_FORMAT.format(new Date()) +
"_" +
UUID.randomUUID();
File databaseDumpFile =
new File(
System.getProperty("user.home") + "/db.dump.sql");
ProcessBuilder processBuilder =
new ProcessBuilder(cmds[0],
cmds[1],
cmds[2],
cmds[3],
cmds[4],
cmds[5],
cmds[6]);
processBuilder.redirectOutput(databaseDumpFile);
Process process = processBuilder.start();
process.waitFor();
// Unrelevant!
AmazonS3Utilities.AMAZON_S3_UTILITIES
.putDatabaseDumpFile(databaseDumpFileName,
databaseDumpFile);
}