Can't create/write to file

Já tentei de todas as formas
já dei privilegios para pastar já tentei no diretorio dos meus documentos
já tentei utilizar o dump do workbench do xampp
e continua a mesma coisa…
alguém me salva pff

meu metodo:

  public boolean backupDB(String dbName, String dbUserName, String dbPassword, String path) {
    	
    	String[] executeCmd = new String[] {
    	        "C:\\Program Files\\MySQL\\MySQL Workbench 8.0 CE\\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;
	}

meu main:

boolean backupDB = backup.backupDB("bd_relatorios", "root", "", "C:\\Users\\Gabriel\\Documents\\Nova pasta (2)\\das");

error:
mysqldump: Can't create/write to file 'C:\Users\Gabriel\Documents\Nova pasta (2)\das' (OS errno 13 - Permission denied)

Consegue executar o mysqldump em linha de comando?
Caso afirmativo, como é sua linha de comando?

consigo sim:

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

é um arraylist

saiu o error porém ficar
int processComplete = p.waitFor(); quando chega nessa parte o programa continua executando mas não sai dai e não vai pro if e else

dump

Você postou o código Java, perguntei se você consegue executar em linha de comando.
Lá no prompt do Windows.

Opa eu adicionei o mysql ao meu path

utilizei o comando mysql no cmd e deu isso:

Se você não está nem conseguindo executar o programa em linha de comando, como espera executar a partir do Java? :wink:

A mensagem abaixo:

'mysqldump' não é reconhecido como um comando interno ou externo, um programa operável ou um arquivo em lotes.

Significa que a pasta do mysqldump não está na variável de ambiente PATH
Ou você adiciona a pasta à variável ou executa o programa a partir da pasta dele.

O código que escreveu no Java equivale à isso aqui:

C:\xampp\mysql\bin\mysqldump.exe -u root -p "" --add-drop-database -B bd_relatorios -r "C:\Users\Gabriel\Documents\Nova pasta (2)\das"

Mas em linha de comando você tentou executar isso aqui:

mysqldump -u root -p bd_relatorios > C:\MudinhoX\bacxk.sql

Pra mim os parâmetros parecem bem diferentes.

opa desculpa eu tinha esquecido de editar o post:
Opa eu adicionei o mysql ao meu path

porém deu esse error no cmd

(está procurnado um usuario aleatorio e não o root)
no caso seria:

mysqldump -u root -p --add-drop-database -B bd_relatorios > C:\MudinhoX\bacxk.sql

(executando isso abre um outro cmd bem rápido e fecha na mesma hora porém o arquivo fica em branco)

?

Consegui executar pelo cmd com esse comando:

mysqldump --column-statistics=0 -u root -p bd_relatorios > C:\MudinhoX\bacxk.sql

isso pelo mysql-8.0.16-winx64

agora pelo xampp o arquivo fica em branco
com
mysqldump --column-statistics=0 -u root -p bd_relatorios > C:\MudinhoX\bacxk.sql
ou sem
mysqldump -u root -p bd_relatorios > C:\MudinhoX\bacxk.sql
(eu mudei o path antes de usar)

e utilizando isso no java continua do msm jeito :frowning:

Verificou se o serviço está ativo? Veja se o serviço está rodando (Win + R -> services.msc -> Enter) e procure ver se o MySQL ou o Xampp está como iniciado. No manual do MySQL tem algo sobre isso: https://dev.mysql.com/doc/refman/8.0/en/cannot-create.html.

1 curtida