java+mqsql+backup

ich hab eine lösung gefunden, die funktioniert aber leider nur wenn ich sie aus der dos-konsole raus eingebe,Aus dem programm raus leider nicht

Code:
Runtime.getRuntime().exec("cmd /C/Programme/MySQL/MySQL Server 6.0/bin/mysqldump.exe studio -h localhost -a -C -c -e --user=root --password=passwort > backup/backup%Date%.sql");




datei wird ohne inhalt erstellt
 
Ich vermute dass es an dem Pfad liegt. Pfade mit Leerzeichen sollten in Anführungsstriche gestellt werden. Und heisst es nicht C: ?

Bei mir läuft es aber auch dann noch nicht. Würde dir daher empfehlen wenn möglich den ProcessBuilder zu benutzen, da dieser zumindest Fehlermeldungen ausgibt.
 
Hallo,
also wenn du den cmd befehl ausführst heißt es nicht c: sondern c/

ich habe es mit dem ProcessBuilder versucht funktioniert leider auch nicht,
aber ich denke auch, dass ich es nicht richtig mache...Bekomme aber leider keine exception.

Code:
String[]command={"cmd","/c","/Programme","/MySQL","/'MySQL Server 6.0'","/bin","/mysqldump.exe studio -h localhost -a -C -c -e --user=root --password=passwort > backup/backup%Date%.sql"};
ProcessBuilder builder = new ProcessBuilder( command); 
process=builder.start();
process.waitFor();
 
Exception bekommst Du nicht, da der Fehler von der cmd geworfen wird. Und Du wohl den Error / InputStream nicht ausließt (siehe mein Link oben).

Du übergibts dem cmd ja den Pfad zerlegt, das kann So nicht gehen. Du mußt das als einen String machen:

"/c/Programme/MySQL/MySQL Server 6.0/bin/mysqldump.exe"

Das ist jetzt so aus dem Kopf, hab eben kein Windows zur Hand um das zu prüfen.

Eventuell schreibst Du ja den mysqldiump aufruf auch in eine mydump.cmd und rufst die auf?

Gruß
 
Sorry hab deinen link noch gra nicht durch gelesen weil ich erst mit dem ProcessBuilder versuchen wollte.Hab ich aber grad nachgeholt ;)
hab jetzt ein leichte beispiel gemacht

Code:
		     try
		        {      
		    	 
		            Runtime rt = Runtime.getRuntime();
		            Process proc = rt.exec("cmd /C/Programme/MySQL/");
		            InputStream stderr = proc.getErrorStreamsql'");
		            InputStreamReader isr = new InputStreamReader(stderr);
		            BufferedReader br = new BufferedReader(isr);
		            String line = null;
		            System.out.println("<ERROR>");
		            while ( (line = br.readLine()) != null)
		                System.out.println(line);
		            System.out.println("</ERROR>");
		            int exitVal = proc.waitFor();
		            System.out.println("Process exitValue: " + exitVal);
		        } catch (Throwable t)
		          {
		            t.printStackTrace();
		          }

<ERROR>
Der Befehl "/Programme/MySQL/" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.
</ERROR>

mhm warum
 
Zuletzt bearbeitet:
Code:
Process proc = rt.exec("cmd /c \" c:\\Programme\\MySQL\\MySQL Server 6.0\\bin\\mysqldump.exe studio -h localhost -a -C -c -e --user=root --password=**** > backup%Date%.sql \" ");

habs jetzt so versucht ... bekomm immer noch die gleiche fehlernachricht
\"= steht doch für anführungszeichen oder?
und wenn ja versteh ich nicht so ganz warum er den befehl nicht kennt:(
 
So gehts nun:
Java:
public static void main(String[] args) throws IOException {
		// Backup Prozess definieren
		ProcessBuilder builder = new ProcessBuilder("cmd",
				"/c",
				"mysqldump.exe",
				"test",
				"-hlocalhost",
				"-a",
				"-C",
				"-c",
				"-e",
				"--user=root",
				"--password=*******",
				">",
				"D:/backup%date%.sql");
		// Ausführungsverzeichnis setzen, dann muss man nicht sich mit
		// den Leerzeichen
		// rumärgern
		builder.directory(new File("C:/Programme/MySQL/MySQL Server 5.0/bin"));

		// Mögliche Fehler in extra Datei schreiben
		Process process = builder.start( );
		Scanner s = new Scanner(process.getErrorStream( )).useDelimiter("\\Z");

		if (s.hasNext( )) {
			FileWriter writer = new FileWriter(new File("d:/backup_error.sql"));
			writer.write(s.next( ));
			writer.flush( );
			writer.close( );
		}
	}
 
cool danke funktioniert endlich !!
hätte noch kurz ne frage.
Gibt es einen Befehl um die aktuelle Server version herauszufindenoder den pfad wo er liegt?
thx
 
Zuletzt bearbeitet:
Zurück