Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Backup mit Batchfile

Frage Entwicklung Batch & Shell

Mitglied: Jannisneedssolution

Jannisneedssolution (Level 1) - Jetzt verbinden

29.06.2012 um 08:45 Uhr, 5106 Aufrufe, 8 Kommentare

Hey Leute,

ich möchte mit einem Batchfile ein Datenbankbackupstool erstellen, dass dann mittels Scheduled Tasks regelmässig Backups der Datenbank macht.
Grundsätzlich habe ich es mal so aufgebaut, wie es unten zu sehen ist doch ich kenne die Einzelheiten viel zu wenig:


Zahl = (Zahl + 1)
cd D:\WAMP\MySQL\MySQL_Server_5.5\bin
D:\WAMP\MySQL\MySQL_Server_5.5\bin\mysql.exe -u root -p
Passwort
mysqldump --tab=D:\Backup --opt %Zahl%backup_w3dev_%date%.sql
cd D:\Backup
If Zahl < (Zahl - 10) rm %Zahl%backup_w3dev_*.sql

Probleme:
- Ich weiss nicht wie ich die Variable Zahl einlesen und so kontinuierlich steigern kann
- Ich weiss nicht ob die Eingabe desPassworts so funkionieren kann
- Ich weiss nicht ob der IF Befehl so korrekt ist

Wäre euch dankbar wenn ihr mir weiterhelfen könntet. Natürlich wären auch andere Lösungsvorschläge toll.

Gruss Jannis
Mitglied: Skyemugen
29.06.2012, aktualisiert um 09:05 Uhr
Aloha,

man öffne die Konsole, gebe

set /?
und
IF /?
ein ...

Zahl steigern ... innerhalb der Batch oder bei jedem Aufruf oder ... oder ?

greetz André
Bitte warten ..
Mitglied: pieh-ejdsch
29.06.2012 um 15:06 Uhr
moin,

Zitat von Jannisneedssolution:
ein Datenbankbackupstool erstellen
ein Stuhl für eine Bank?

Was genau hast Du denn Eigentlich vor?
Sollen immer nur die letzten 10 aktuellsten Sicherungen aufbewahrt werden?

Wenn die Befehle in der CMD-Line funktionieren (sollten?), dann gehen die auch in einem Batch.
Das gilt auch für die Passworteingabe.

Die Variable Date so wie sie in der CMD zur Verfügung gestellt wird, ist für Datumstempel nicht Gebräuchlich.
Wenn dann Umformatiert.

Gruß Phil
Bitte warten ..
Mitglied: Arano
30.06.2012 um 16:36 Uhr
Schönes Wochenende zusammen

Dann wollen wir das Niveau mal wieder etwas anheben

__Mitzählen:__
Durch das einfache ablegen des Wertes in einer Variablen wird der Wert mit dem Ende des Scripts auch aus dem Speicher gelöscht und ist somit verloren.
Nun könnten wir bei jedem starten der Batch-Datei die Anzahl der Dateien in dem Backupverzeichnis zählen um so den Wert wieder in Erfahrung zu bringen. Dies kann aber kompliziert werden wenn auch andere Backups oder das Backupscript selber ebenfalls in dem Verzeichnis liegen.
Also speichern wir den Wert einfach in einer separaten Datei. So brauchen wir beim starten der Batch nur überprüfen ob die Datei existiert ( = Wert auslesen) oder ob sie noch fehlt ( = null verwenden [erster Batch Aufruf oder ein "Reset"])
01.
set zahl=4 
02.
>"backupCounter.dat" echo %zahl% 
03.
<"backupCounter.dat" set /p zahl= 
04.
set /a neueZahl=%zahl%+1
  1. Wert in Datei speichern
  2. Wert aus Datei in Variable einlesen
  3. Wert um eins erhöhen
Wie man nun die existent einer Datei überprüft über lasse ich mal dir ;) Aber wie man an die Kommandobeschreibung kommt, hat man dir ja schon verraten, s. IF /?

__Passwortübergabe:__
Nein, das funktioniert so NICHT !
Die Batch wird zeilenweise abgearbeitet (Stapelverarbeitung ;) ) - ein Kommando NACH dem anderem.
Das zweite Kommando wird also erst NACH DEM BEENDEN des ersten ausgeführt.
Nach dem ausführen von mysql.exe WARTET dieses Programm auf eine Eingabe (Passwort) und wartet und wartet und wartet...
In der Batch hängen wir also nun "zwischen den Zeilen".
Und selbst wenn dir weiter kämen, aus Sicht der Batch gibt es das Kommando "PASSWORT" auch NICHT was zu einer Fehlermeldung führen würde !
Also müssen wir das Passwort als Parameter mit dem Aufruf der "mysql.exe" als Parameter übergeben.
mysql -u USER -pPASSWORT
Das vermeintlich fehlende Leerzeichen zwischen "-p" und "PASSWORT" ist beabsichtigt ! Denn sonst würde mit "-p" nach einem Passwort gefragt werden und "PASSWORT" als der Name der zu verwendenden Datenbank angesehen werden ;)

__Datenbankbackup__
Hier hast du dich ordentlich verdacht :P
Wie eben schon beschrieben, kommst du erst in die nächste Zeile wenn das Kommando in der vorherigen beendet ist/wurde.
Über die "mysql.exe" loggst du dich allerdings über einen MySQL-Client in die Datenbank ein und erst nach dem Ausloggen geht es dann auch in der Batch weiter.
Jetzt kann man glaube ich die auszuführenden MySQL-Statements auch als Parameter oder in einer Datei an den MySQL-Client übergeben der diese dann ausführt. Das ist in deinem Fall aber weder nötig, noch möglich !
"mysqldump" ist kein Statement sondern ein eigenes Programm.
Also anstelle von "mysql.exe" rufst du einfach nur die "mysqldump.exe" auf und gibt diesem Programm sowohl den Usernamen und das Passwort mit.
mysqldump.exe -u USERNAME -pPASSWORT
Mehr dazu wie immer in der Doku MySQL Reference Manual - mysqldump

__Richtiges IF__
Die Beschreibung kennst du ja jetzt.
Allerdings hast du auch hier einen kleinen Denkfehler, mit
rm %Zahl%backup_w3dev_*.sql
wird das AKTUELLE Backup gelöscht !!!
Hier musst du erst %zahl% um 10 reduzieren (s. mein Beispiel vom Mitzählen),
prüfen ob die Datei existiert und
erst dann löschen (wenn sie denn existiert)
den beim zweitem Backup würde versucht werden das Backup "-8" zu löschen (2-10 = -8)


So jetzt habe ich viel geschrieben und du einiges zum lesen und tippen ;)
Melde dich mal zurück wenn geklappt hat oder du doch noch irgendwo hängst.
Aber beachte dann mal ruhig die Formatierungshilfen des Forums, roter Link über dem Eingabefeld


Schönes Wochenende noch
~Arano
Bitte warten ..
Mitglied: bastla
01.07.2012, aktualisiert um 00:54 Uhr
Hallo @All und und willkommen im Forum Jannisneedssolution!

Nachdem Arano schon eine Menge Hinweise geliefert hast, nur noch eine Anmerkung zum Thema "nur 10 Backups behalten": Das Kunststück mit der laufenden Nummer ist eigentlich unnötig, wenn Du einfach das Sicherungsdatum passend formatiert in den Dateinamen integrierst und nach dem Ausführen des Backups nur noch die 10 aktuellsten Dateien behältst - etwa so:
01.
set "Datei=%date:~-4%%date:~-7,2%%date:~-10,2%_backup_w3dev.sql" 
02.
... 
03.
for /f "skip=10 delims=" %%i in ('dir /b/a-d/o-n D:\Backup\*_backup_w3dev.sql') do echo del "D:\Backup\%%i"
Die Lösch-Zeile ist durch das "echo" im "Demo-Modus" - die Löschbefehle werden so (zum Testen) nur angezeigt - wenn das Ergebnis vernünftig aussieht, einfach das "echo" entfernen ...

Anstelle der Sortierung nach dem Dateinamen mit "/o-n" (wegen des Datums in Schreibweise JJJJMMTT im Namen werden die 10 jüngsten Dateien übersprungen und nur alle weiteren noch vorhandenen "*_backup_w3dev.sql"-Dateien gelöscht) kann auch nach dem Änderungsdatum sortiert werden - dann "/o-d" verwenden ...

Grüße
bastla
Bitte warten ..
Mitglied: Jannisneedssolution
05.07.2012 um 13:08 Uhr
Hallo Arano,

Dein Post hat mich stark weitergebracht. Habe das File nun geschriben mit Dumpfunktion, sowie nur-aktuellste-10-Backups und dazu noch mit einer Art Logfile.

Sollte jemand mal ähnliche Probleme haben --> hier die Batch mit kurzen Erklärungen:

set /p zahl=<Counter.txt
set /a zahl=(%zahl%+1)
echo %zahl% >Counter.txt
set /a bckpdel=(%zahl%-10)

echo >>w3dev.bat.txt
echo # Backup vom %date% # >>w3dev.bat.txt
echo >>w3dev.bat.txt
echo Zeit: %time% >>w3dev.bat.txt
echo Backupnummer: %zahl% >>w3dev.bat.txt
echo Name: %zahl%w3devbackup_%date%.sql >>w3dev.bat.txt
echo Backup Löschen Nr.: %bckpdel%w3devbackup_%date%.sql >>w3dev.bat.txt
echo verwendeter Befehl: "D:\WAMP\MySQL\MySQL_Server_5.5\bin\mysqldump.exe -u root -pJBruler17 --opt --databases w3dev >D:\Backup\%zahl%w3devbackup_%date%.sql" >>w3dev.bat.txt

echo Fehler: >>w3dev.bat.txt

D:\WAMP\MySQL\MySQL_Server_5.5\bin\mysqldump.exe -u root -p[Passwort] --opt --databases w3dev >D:\Backup\%zahl%w3devbackup_%date%.sql 2>> w3dev.bat.txt

IF EXIST D:\Backup\%bckpdel%w3devbackup_*.sql DEL D:\Backup\%bckpdel%w3devbackup_*.sql 2>> w3dev.bat.txt

echo --- >>w3dev.bat.txt

IF EXIST D:\Backup\%zahl%w3devbackup_*.sql echo Backupfile erstellt >>w3dev.bat.txt

Mithilfe der Zeile "echo Fehler:" und "echo ---" halte ich mittels 2>>logfile.txt gleich die Meldungen fest, sobald etwas nicht funktioniert.
Mit --opt --databases richte ich es so ein, dass nicht alle Tabellen einzeln sondern der Dump in einem einzigen File gespeichert werden.
Mit set /p kann ich den Wert aus einem File auslesen und mit set /a kann ich dem Wert einer Variabe hinter dem = Zahlen addieren, subtrahieren oder andere Operatoren verwenden.

Danke nochmals an alle die mir geholfen haben.

Grüsse

Jannis
Bitte warten ..
Mitglied: Arano
05.07.2012 um 15:54 Uhr
Hi,

freut mich helfen zu können :D

ABER....
01.
echo Backup Löschen Nr.: %bckpdel%w3devbackup_%date%.sql >>w3dev.bat.txt
Hm... %date% ist das __heutige Datum__,
%bckpdel% aber die Nummer von __vor 10 Tagen__
Musst du nicht auch das Datum von vor 10 Tagen verwenden ? ;)

01.
echo verwendeter Befehl: "D:\WAMP\MySQL\MySQL_Server_5.5\bin\mysqldump.exe -u root -p"HIER_STEHT_DEIN_PASSWORT" --opt --databases w3dev >D:\Backup\%zahl%w3devbackup_%date%.sql" >>w3dev.bat.txt
__!! Die GANZE WELT kennt nun dein Passwort !!__
Außerdem kannst du es im Logfile ruhig weglassen... nein, lasse es dort besser weg - wozu dutzende male hineinschreiben ?
Ebenso der Aufruf, der steht doch eh in der Batch-Datei ;)

Hinter dem spitzen Klammern fürs umleiten in eine Datei sollte besser kein Leerzeichen stehen ! (s. Löschen von alter Backupdatei)


Und wenn du das soweit alles hast, markiere diesen Beitrag doch bitte als gelöst !


~Arano
Bitte warten ..
Mitglied: bastla
05.07.2012 um 16:20 Uhr
Musst du nicht auch das Datum von vor 10 Tagen verwenden ? ;)
bzw vielleicht doch gleich ganz auf die Nummer verzichten?

Grüße
bastla
Bitte warten ..
Mitglied: Jannisneedssolution
05.07.2012 um 16:26 Uhr
Danke ;)
Das mit dem echo Backup Löschen Nr. ist noch falsch. Hier sollte ur die Nummer stehen

Das Passwort spielt keine Rolle da die Site nie online gehen wird sondern später neu auf einem Prod-Webserver mit anderen PWs innerhalb der Firmenumgebung mittels einer DNS-Umleitung laufen wird. Zudem ist es bloss das Entwicklerpasswort welches ich aktuell auf dem Dev-Webserver gesetzt habe

Aber du hast schon recht, den Befehl nochmals ins Log zu schreiben macht keinen Sinn da Befehlsänderungen sowieso dokumentiert sind.

Grüsse

Jannis
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Hyper-V
Altaro VM Backup auf RDX

Frage von smeclnt zum Thema Hyper-V ...

Windows Server
gelöst BackupExec 2016 Fehler beim Backup von Windows 2016 (1)

Frage von Looser27 zum Thema Windows Server ...

Vmware
Veeam für VM Ware Backup Fehler (2)

Frage von JoergN1968 zum Thema Vmware ...

SAN, NAS, DAS
gelöst NAS RAID5 - RAID0 und Backup (7)

Frage von easy4breezy zum Thema SAN, NAS, DAS ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Festplatten, SSD, Raid
M.2 SSD wird nicht erkannt (14)

Frage von uridium69 zum Thema Festplatten, SSD, Raid ...