Ihr betreibt einen MySQL-Datenbankserver unter Windows? Sichert ihr auch brav regelmäßig eure Datenbanken? Das ist nicht schwer und kann ohne zusätzliche Software realisiert werden. Ich zeige hier eine Möglichkeit zur regelmäßigen Sicherung von MySQL-Datenbanken unter Windows. Wir nutzen dazu die Bordmittel des MySQL-Servers sowie die Windows Aufgabenverwaltung.
Der MySQL-Server bringt bereits alles mit, um Datenbanken zu verwalten und auch zu sichern. So auch das Befehlszeilen-Tool mysqldump
mit dem wir einen Datenbankdump, also eine Kopie der Datenbank, erstellen können.
Die Syntax um eine Datenbank mittels mysqldump
zu sichern lautet
mysqldump -u'Datenbankbenutzername' -p'Datenbankbenutzerpasswort' 'Datenbankname' > sicherung.sql
Machen wir es etwas plastischer. Wollen wir mit dem Chef des Ganzen, nämlich dem User root
mit dem Passwort geheim
eine Datenbank mit dem Namen meineDatenbank
sichern, geben wir folgendem Befehl im Programmverzeichnis (\mysql\bin
) des MySQL-Servers ein:
mysqldump -uroot -pgeheim meineDatenbank > sicherung.sql
Damit wir diesen Befehl regelmäßig automatisiert ausführen können, benötigen wir eine Batch-Datei, also eine unter Windows ausführbare Datei. Öffnet den Explorer und erstellt im bin
-Verzeichnis des MySQL Servers, in diesem Beispiels d:\mysql\bin
, aus dem Kontextmenü Neu ein Textdokument.
Als Dateinamen vergebt ihr sicherung.bat
(vergesst nicht die Dateierweiterung .txt
zu entfernen, die Windows vorgegeben hat).
Danach öffnet ihr die Datei mit einem Editor und tragt folgendes ein:
@echo off echo Sicherung Datenbank 'meineDatenbank' FOR /F "tokens=1,2,3 delims=/: " %%a in ('Time/T') do set CTIME=%%a%%b%%c set ZEIT=%CTIME% set DATUM=%date% d:\mysql\bin\mysqldump -uroot -pPasswort meineDatenbank > d:\mysql\backup\meineDatenbank_%DATUM%_%ZEIT%.sql
In diesem Beispiel ist der MySQL-Server im Verzeichnis D:\mysql
installiert. Die Sicherung erfolgt als Benutzer root
in das Verzeichnis D:\mysql\backup
. An den Dateinamen hängen wir Datum und Uhrzeit, damit die Sicherungsdatei bei der nächsten Sicherung nicht überschrieben wird.
Eigentlich ein schlechtes Beispiel, denn Sicherungen gehören auf eine andere Festplatte oder Medium, als die Ursprungsdateien; sonst nutzt die Sicherung bei einem Festplattencrash natürlich wenig. Macht es also besser wie ich und nutzt ein Backupverzeichnis, welches nicht auf der gleichen Festplatte wie der MySQL-Server liegt. Beispielsweise euren Dropbox-Ordner.
So weit, so gut.
Nun gilt es eine Aufgabe in der Windows Aufgabenverwaltung zu erstellen. Damit können wir dann die regelmäßige Ausführung dieser Batch-Datei planen. Die Aufgabenplanung findet ihr in der Systemsteuerung unter dem Punkt Verwaltung.
Im Menü Aktion wählen wir Einfache Aufgabe erstellen….
Gebt der Aufgabe einen Namen
Wählt im zweiten Schritt Zyklus und Zeitpunkt der Sicherung; im Beispiel die wöchentliche Sicherung am Montag um 19.00 Uhr. Hier solltet ihr logischerweise einen Zeitpunkt wählen, an dem euer Rechner in der Regel an ist.
Als Aktion wählt ihr Programm starten
Im Eingabefeld Programm/Skript geben wir nun den Pfad zu der angelegten Batch-Datei an
Um sicher zugehen, dass die Sicherung auch wie gewünscht funktioniert, werden wir diese nun manuell einmal ausführen. Wechselt dazu in die Aufgabenplanungsbibliothek und sucht in der Liste die eben erstellte Aufgabe. Klickt diese mit rechts an und wählt Ausführen.
In der Spalte Ergebnis der letzten Ausführung seht ihr ob die Sicherung geklappt hat.
Da ältere Sicherungsdateien nicht automatisch gelöscht werden, solltet ihr das Sicherungsverzeichnis von Zeit zu Zeit mal manuell aufräumen und einige ältere Sicherungen löschen.
So, das war’s auch schon.
Ich betreibe mehrere Datenbanken unter einem anderen MySQL Usernamen. Muss ich die trotzdem als root sichern, oder spielt das eigendlich keine Rolle?
Hey,
spielt keine Rolle. Brauchst nur einen User der Vollzugriff auf die DB hat.
Gruß Olli
Ok, besten Dank.
Sehr gute beschreibung, Danke
aber ich habe eine Frage zur Wiederherstellung.
Ich habe folgendes Script: sicherung.bat
@echo off
echo Sicherung Datenbank ‚dbname‘
FOR /F „tokens=1,2,3 delims=/: “ %%a in (‚Time/T‘) do set CTIME=%%a%%b%%c
set ZEIT=%CTIME%
set DATUM=%date%
„C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqldump“ -uroot -ppasswort dbname > „D:\mysql\backup\dbname_%DATUM%_%ZEIT%.sql“
Wie mache ich die dazugehörige Wiederherstellung ? Ich habe auf dem Stick („D:\“) jetzt einen Dateipfad: „D:\mysql\backup“ und da sind folgende Daten enthalten:
dbname_10.11.2013_1028.sql
dbname_10.11.2013_1453.sql
dbname_10.11.2013_2200.sql
dbname_11.11.2013_2200.sql
dbname_12.11.2013_2200.sql
ich möchte jetzt per .bat Datei eine von diesen Sicherungen Wiederherstellen, aber wie mache ich das? Von mir aus kann es auch immer die letzte Sicherung sein.
Folgende .bat Datei ist bei mir unter „C:\Program Files\MySQL\MySQL Server 5.6\bin\“ gepeichert:
wiederherstellung.bat
@echo off
echo Wiederherstellung Datenbank ‚dbname‘
mysql -uroot -ppasswort dbname < D:\mysql\backup\dbname_12.11.2013_2200.sql"
Es ist ja nicht Sinn und Zweck, immer die .bat Datei zu bearbeiten bevor man eine Sicherung einspielen will.
Mit freundlichen Grüßen
Jey
Hallo Jey,
dann lass doch Datum und Uhrzeit beim Dateinamen weg. Dann hast du immer nur eine Sicherung und brauchst die Batch-Datei nicht anzupassen. Andere Lösung fällt mir da auch nicht ein.
Aber, wenn ich mal fragen darf, warum sicherst du so häufig Datenbanken zurück?
Gruß Olli
hab ich gestren erarbeitet :-)
@echo off
setlocal
echo Datenbank ‚dbname‘ Wiederherstellung
echo ========================================
echo.
set workdir=“D:\mysql\backup\“
set files=
dir %workdir% /A-D/B/OG-D>%temp%files.tmp
for /f „tokens=1* delims=“ %%i in (%temp%files.tmp) do if not defined files set „files=%%i“
del %temp%files.tmp
echo.
echo Letztes Backup:
echo %files%
echo.
mysql -uroot – pmysqlpasswort dbname < D:\mysql\backup\%files%
echo.
echo Datei wiederhergestellt.
echo ========================
echo.
echo.
Ich erarbeite gerade ein Projekt (Ausbildung) für Kunden
und wenn der Server „abschmiert“, dann sind Sicherungen vorhanden. 14 Tage alte sicherungen werde ich löschen (werde ich mit der Sicherungs.bat machen)
Momantan ist alles noch eine Testphase :-)
eben so das zurück sichern.
Alles wird nach und nach optimiert. Danke nochaml für deine Hilfe und deine gute bschreibung :-)
Danke für den Tipp. Genau das habe ich gesucht. Klappt prima!
Wir schreiben für einen Kunden Prüfergebnisse in eine Datenbank. Die Prüfanlage soll aber 24/7 laufen und produrchlaufenem Teil alle 60 s entstehen 800 Zeilen mit Meßwerten in der Datenbank. Bei einer täglichen Datensicherung also schon eine ganze Menge. Geht das mit diesen „Bordmitteln“ unterbrechungsfrei oder sollen wir dem Kunden lieber eine Software wie Percona oder Barracuda empfehlen?
Hallo der Dumper funktioniert und erstellt auch Dateien. Auch über die Aufgaben Plannung allerdings sind das nur Hülsen ohne inhalt…
kannmir bitte wer helfen?
Hallo Roland & alle anderen..!
Genau das Problem habe ich auch gerade. Es funktioniert alles einwandfrei. Alles gut. Allerdings werden nur 0Byte Dateien mit dem entsprechenden Namen gespeichert. Also OHNE Inhalt.
Ist das vielleicht weil dieser Thread hier schon einige Jährchen älter ist und es sich bis jetzt Änderungen ergeben haben?
Ist schon komisch. Sonst funktioniert alles wie beschrieben. Aber er speichert nur den Datenbanken Namen ohne Inhalt.
Würde mich auch sehr über Tipps freuen um das zu beheben.
Vielen Dank
/Marcus