Problema ao criar um arquivo

11 respostas
LostSpirit

Estou tentando exportar o banco de dados porém não estou conseguindo
error:
Cannot run program “mysqldump”: CreateProcess error=2, O sistema não pode encontrar o arquivo especificado

classe que recebe os parametros:

public class test {
    public boolean backupDB(String dbName, String dbUserName, String dbPassword, String path) {
    	File file = new File(path);
    	file.mkdir();
        String executeCmd = "mysqldump -u " + dbUserName + "-p" + dbPassword + " --add-drop-database -B " + dbName + " -r " + file;
        Process runtimeProcess;
        try {

            runtimeProcess = Runtime.getRuntime().exec(executeCmd);
            int processComplete = runtimeProcess.waitFor();

            if (processComplete == 0) {
                System.out.println("sucess");
                return true;
            } else {
                System.out.println("fail");
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }

        return false;
    }
}

o meu main;

test backup=new test();
        String caminho = System.getProperty("user.home");
	    boolean backupDB = backup.backupDB("teste", "root", "", "\"C:/mine/SQLBackup/teste.sql\"");
	    if(backupDB){
	    System.out.println("success");
	    }else{
	    System.out.println("fail");
	    }

11 Respostas

darlan_machado

Por que está passando o caminho “entre parênteses”?

staroski

Seu problema não está em criar um arquivo e sim em executar um programa a partir do Java.

Quando você quer executar um programa que aceita parâmetros, então você tem que utilizar o método exec que recebe um array de String como parâmetro.

Então você tem que trocar esta linha:

String executeCmd = "mysqldump -u " + dbUserName + "-p" + dbPassword + " --add-drop-database -B " + dbName + " -r " + file;

Por esta:

String[] executeCmd = new String[] {
    "mysqldump",
    "-u",
    dbUserName,
    "-p",
    dbPassword,
    "--add-drop-database",
    "-B",
    dbName,
    "-r",
    file.getAbsolutePath()
};

Outra coisa, se o programa não estiver na variável de ambiente PATH então você também precisa informar o diretório onde o programa se encontra, assim:

File pasta = new File("<a pasta onde o 'mysqldump' se encontra>");
runtimeProcess = Runtime.getRuntime().exec(executeCmd, null, pasta);
int processComplete = runtimeProcess.waitFor();
LostSpirit

opa
vlw mano

como estou utilizando o xampp eu fiz isso:

File pasta = new File("C:\\xampp\\mysql\\bin");
    	runtimeProcess = Runtime.getRuntime().exec(executeCmd, null, pasta);
    	int processComplete = runtimeProcess.waitFor();

porém continuou com o mesmo error;

Cannot run program “mysqldump” (in directory “C:\xampp\mysql\bin”): CreateProcess error=2, O sistema não pode encontrar o arquivo especificado

staroski

Provavelmente esqueceu de por o nome completo do mysqldump
Dá uma olhada no conteúdo da pasta C:\xampp\mysql\bin.
O nome do arquivo deve ser mysqldump.exe, mysqldump.bat, mysqldump.cmd alguma coisa assim…

LostSpirit

C:\xampp\mysql\bin\mysqldump.cmd
eu tentei com todos .exe .bat .cmd e todos deram o mesmo error

lá mostra como .exe / aplicativo o arquivo do mysqldump.

staroski

Então seu array de String tem que ser assim:

String[] executeCmd = new String[] {
    "mysqldump.exe",
    "-u",
    dbUserName,
    "-p",
    dbPassword,
    "--add-drop-database",
    "-B",
    dbName,
    "-r",
    file.getAbsolutePath()
};
LostSpirit

percebi eu mudei no array,
e meu file pasta ficou assim: File pasta = new File(“C:\xampp\mysql\bin”)

porém continua dando o mesmo error tentei com todas extensões

staroski

Que parâmetros você passa para o método backupDB?

LostSpirit

boolean backupDB = backup.backupDB(“bd_relatorios”, “root”, “”, “C:/MudinhoX/Data/xd.sql”);

esses
eu não sei qual o motivo pq parece que a logica que você me falou está certa
pois diz que não pode executar o dump que está na pasta bin agora por qual motivo não está encontrando eu não sei .

Cannot run program “mysqldump.exe” (in directory “C:\xampp\mysql\bin”)

LostSpirit
public boolean backupDB(String dbName, String dbUserName, String dbPassword, String path) {
	
	String[] executeCmd = new String[] {
	        "C:\\xampp\\mysql\\bin\\mysqldump.exe ",
	        "-u ",
	        dbUserName,
	        "-p ",
	        dbPassword,
	        "--add-drop-database ",
	        "-B ",
	        dbName,
	        "-r ",
	        path
	};

	final ProcessBuilder pb = new ProcessBuilder(Arrays.asList(executeCmd));
	final Process p;
	try {
	    p = pb.start();
	    int processComplete = p.waitFor();

	    if (processComplete == 0) {
	        System.out.println("Backup created successfully");
	        return true;
	    } else {
	        System.out.println("Could not create the backup");
	        BufferedReader reader = new BufferedReader(new InputStreamReader(p.getErrorStream()));
	        String line = null;
	        while ( (line = reader.readLine()) != null) {
	            System.out.println(line);
	        }
	    }
	} catch (IOException | InterruptedException e) {
	    e.printStackTrace();
	}
	return false;
}

consegui arrumar porém estou com error em um comando
'–add-drop-database '.

mysqldump: [ERROR] unknown option '–add-drop-database '.

staroski

Remove os espaços em branco que você deixou nos elementos desse array.
Cada String não deve começar nem terminar com espaço.
Depois posta como ficou sua solução final.

Criado 17 de julho de 2019
Ultima resposta 18 de jul. de 2019
Respostas 11
Participantes 3