Seite 1 von 2
RunProgram Problem mit mysqldump -gelöst
Verfasst: 31.01.2010 05:01
von Andreas21
Ich habe ein Problem mit RunProgram.
Ich will "mysqldump.exe" starten. Dieses Programm ist bei Mysql Server bei.
Ich will damit meine Datenbanken sichern.
RunProgram will nur die Parameter nicht übergeben.
Wenn ich es so versuche:
Code: Alles auswählen
Compiler = RunProgram("D:\server\xampp\mysql\bin\mysqldump.exe", "--opt -u root --all-databases > dbdata.sql","", #PB_Program_Open|#PB_Program_Read)
Output$ = ""
If Compiler
While ProgramRunning(Compiler)
Output$ + ReadProgramString(Compiler) + Chr(13)
Wend
Output$ + Chr(13) + Chr(13)
Output$ + "Exitcode: " + Str(ProgramExitCode(Compiler))
EndIf
MessageRequester("Output", Output$)
bekomme ich diese Meldung.
Usage: mysqldump [OPTIONS] database [tables]
OR mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
OR mysqldump [OPTIONS] --all-databases [OPTIONS]
For more options, use mysqldump --help
Exitcode: 1
Versuch ich es so:
Code: Alles auswählen
Compiler = RunProgram("D:\server\xampp\mysql\bin\mysqldump.exe",chr(34)+ "--opt -u root --all-databases > dbdata.sql"+chr(34),"", #PB_Program_Open|#PB_Program_Read)
Output$ = ""
If Compiler
While ProgramRunning(Compiler)
Output$ + ReadProgramString(Compiler) + Chr(13)
Wend
Output$ + Chr(13) + Chr(13)
Output$ + "Exitcode: " + Str(ProgramExitCode(Compiler))
EndIf
MessageRequester("Output", Output$)
oder so
Code: Alles auswählen
Compiler = RunProgram(chr(34)+"D:\server\xampp\mysql\bin\mysqldump.exe"+chr(34), "--opt -u root --all-databases > dbdata.sql","", #PB_Program_Open|#PB_Program_Read)
Output$ = ""
If Compiler
While ProgramRunning(Compiler)
Output$ + ReadProgramString(Compiler) + Chr(13)
Wend
Output$ + Chr(13) + Chr(13)
Output$ + "Exitcode: " + Str(ProgramExitCode(Compiler))
EndIf
MessageRequester("Output", Output$)
Bekomme ich keine Meldung und es wird auch kein Backup erstellt.
Gebe ich es in der Eingabeaufforderung von Windows ein:
Code: Alles auswählen
D:\server\xampp\mysql\bin\mysqldump.exe --opt -u root --all-databases > dbdata.sql
geht es ohne Probleme.
Re: RunProgram Problem
Verfasst: 31.01.2010 11:21
von Rebon
Weshalb chr(34)? Eher chr(32) für Space?
Re: RunProgram Problem
Verfasst: 31.01.2010 11:31
von Little John
Ich denke dass das Problem darin liegen könnte, dass Du die Ausgabe mit
> in eine Datei umleitest ... dass
ReadProgramString() die Ausgabe dann nicht mehr lesen kann.
Was willst Du denn mit
ReadProgramString() bezwecken, wenn die Ausgabe ohnehin in eine Datei umgeleitet wird?
Andreas21 hat geschrieben:Gebe ich es in der Eingabeaufforderung von Windows ein:
Code: Alles auswählen
D:\server\xampp\mysql\bin\mysqldump.exe --opt -u root --all-databases > dbdata.sql
geht es ohne Probleme.
Was heißt das genau? Wird die Ausgabe dann in "dbdata.sql" gespeichert, und ebenfalls auf der Konsole angezeigt?
Gruß, Little John
Re: RunProgram Problem
Verfasst: 31.01.2010 14:32
von Andreas21
Hi,
Little John hat geschrieben:Ich denke dass das Problem darin liegen könnte, dass Du die Ausgabe mit
> in eine Datei umleitest ... dass
ReadProgramString() die Ausgabe dann nicht mehr lesen kann.
Was willst Du denn mit
ReadProgramString() bezwecken, wenn die Ausgabe ohnehin in eine Datei umgeleitet wird?
Andreas21 hat geschrieben:Gebe ich es in der Eingabeaufforderung von Windows ein:
Code: Alles auswählen
D:\server\xampp\mysql\bin\mysqldump.exe --opt -u root --all-databases > dbdata.sql
geht es ohne Probleme.
Was heißt das genau? Wird die Ausgabe dann in "dbdata.sql" gespeichert, und ebenfalls auf der Konsole angezeigt?
Gruß, Little John
Das Programm ist dafür da um Daten aus den Datenbanken von einem Mysql Server in eine Datei zu speichern. Z.b. für ein Backup.
In der Console wird nichts ausgegeben.
Wen ich das > weg lasse.
Wird zwar alles in der Console ausgegeben aber nur wenn ich es über Eingabeaufforderung eingebe. Bei RunProgramm passiert nichts.
Code: Alles auswählen
Compiler = RunProgram("D:\server\xampp\mysql\bin\mysqldump.exe", "--opt -u root --all-databases","", #PB_Program_Open|#PB_Program_Read)
Output$ = ""
If Compiler
While ProgramRunning(Compiler)
Output$ + ReadProgramString(Compiler) + Chr(13)
Wend
Output$ + Chr(13) + Chr(13)
Output$ + "Exitcode: " + Str(ProgramExitCode(Compiler))
EndIf
MessageRequester("Output", Output$)
Das Programm wird nur mit Parameter gestartet.
Es speichert dann den kompletten Inhalt aller Datenbanken in dem sql file und fertig ist es.
Infos zu den Parametern auf Deutsch gibt es hier
http://www.norbert-pfeiffer.de/sql/manual.de_267.html
Rebon hat geschrieben:Weshalb chr(34)? Eher chr(32) für Space?
Ich hab versuch den Programm Namen in "" zu setzen.
Was soll mir da Space bringen?
Windows hat mit Verzeichnissen wo ein Space drin vorkommt Probleme.
Deshalb der Versuch mit "". Auch wenn kein Space drin ist.
Re: RunProgram Problem
Verfasst: 31.01.2010 14:46
von bobobo
'D:\server\xampp\mysql\bin\mysqldump.exe --opt -u root --all-databases > dbdata.sql'
bedeutet für pb (zumindest offiziell)
Code: Alles auswählen
Runprogram("mysqldump.exe"," --opt -u root --all-databases > dbdata.sql","D:\server\xampp\mysql\bin\")
danach aber nicht sofort ein end sondern lieber 'n tacken warten.
oder mit #PB_Program_Wait aufrufen und auf das ende warten
Re: RunProgram Problem
Verfasst: 31.01.2010 14:52
von Andreas21
Alles schon ausprobiert. Ohne erfolg.
Code: Alles auswählen
Compiler = RunProgram("D:\server\xampp\mysql\bin\mysqldump.exe"," --opt -u root --all-databases > dbdata.sql","D:\server\xampp\mysql\bin", #PB_Program_Open|#PB_Program_Read)
Output$ = ""
If Compiler
While ProgramRunning(Compiler)
Output$ + ReadProgramString(Compiler) + Chr(13)
Wend
Output$ + Chr(13) + Chr(13)
Output$ + "Exitcode: " + Str(ProgramExitCode(Compiler))
EndIf
MessageRequester("Output", Output$)
SetClipboardText(Output$)
Code: Alles auswählen
Usage: mysqldump [OPTIONS] database [tables]
OR mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
OR mysqldump [OPTIONS] --all-databases [OPTIONS]
For more options, use mysqldump --help
Exitcode: 1
Das selbe ist auch wenn ich "D:\server\xampp\mysql\bin\mysqldump.exe" durch "mysqldump.exe" ersetze.
Man könnte es zwar auch über bat dateien machen. Aber das will ich ungern machen.
Also:
PB
dump.bat
Code: Alles auswählen
D:\server\xampp\mysql\bin\mysqldump.exe --opt -u root --all-databases > dbdata.sql
Den das geht ja auch ohne probleme.
Re: RunProgram Problem
Verfasst: 31.01.2010 15:05
von bobobo
das mit der externen batchdatei hätte ich jetzt gerade vorgeschlagen .. meine tests hier waren auch nicht gerade von Erfolg gekrönt.
blöderweise geht es mit parameter --help
(wichtig !! unicode aus)
Code: Alles auswählen
Debug SetCurrentDirectory("x:\xampp\mysql\bin\")
prog.s="mysqldump.exe"
;par.s=" --opt -u root -p --password=sagichnich --all-databases"; > y:\dbdata.sql"
par.s="--help"
runner= RunProgram(prog,par,"",#PB_Program_Error|#PB_Program_Open|#PB_Program_Read)
Debug par
While ProgramRunning(runner)
;Debug "rennt"
;Debug ReadProgramError(runner)
Debug ReadProgramString(runner)
Wend
MessageRequester("","schon fertig")
hab das thema mal etwas spezifiziert
auch im englishen forum vor ein paar jahren
http://www.purebasic.fr/english/viewtop ... =mysqldump
Re: RunProgram Problem mit mysqldump
Verfasst: 31.01.2010 16:03
von bobobo
so .. nun aber .. zwar auch mit cmd aber eigentlich nicht so schlimm
Code: Alles auswählen
;
;
prog.s="cmd"
par.s="/c x:\xampp\mysql\bin\mysqldump.exe -u root -p --password=sagichnic --opt --all-databases > y:\dbdata.sql"
runner= RunProgram(prog,par,"",#PB_Program_Wait); auf keinen Fall ProgramHide
;da die Umleitung dann nicht funktioniert und in die Console ausgegeben wird und damit
;das verstecken gerade das umgekehrte erwirkt.
MessageRequester("ok","nochmal anders")
;mit folgenden kann die Ausgabe abgefangen und entsprechend bearbeitet werden (z.B. als
;datei weggeschrieben oder was auch immer
par.s="/c x:\xampp\mysql\bin\mysqldump.exe -u root -p --password=sagichnich --opt --all-databases "
Debug prog+" "+par
runner= RunProgram(prog,par,"",#PB_Program_Hide|#PB_Program_Open|#PB_Program_Read)
While ProgramRunning(runner)
line.s=ReadProgramString(runner)
If FindString(line,"CREATE",0)
Debug line
EndIf
Wend
CloseProgram(runner)
MessageRequester("","schon fertig")
mühsame kacke das alles
Re: RunProgram Problem mit mysqldump
Verfasst: 31.01.2010 16:09
von Andreas21
Ok danke ich werd das testen^^
Ich will das aber unter Windows und Linux nutzen.
Unter Linux sind es die selben Parammeter wie bei windows.
Nur weis ich nicht wie es sich da wegen cmd lauffen wird.
Kenn mich da mit Linux noch nicht so gut aus -.-
Re: RunProgram Problem mit mysqldump
Verfasst: 31.01.2010 16:11
von bobobo
da du auch unter linux mittels runprogram eine shell starten können solltest, dürfte es auch eigentlich
keine unlösbaren probleme geben.
schreib mal wenns geklappt haben sollte.