Lesedauer 2 Minuten

Der folgende Beitrag zeigt, wie man unter Windows 11 eine MySQL-Datenbank per PowerShell Skript automatisiert sichert.  Dabei werden mehrere Backups vorgehalten und abgelaufene Sicherungen automatisch gelöscht. Die MySQL-Dumps sind UTF8-kodiert und auf allen Plattformen zurücklesbar.

Vorsicht: Zerschossene Umlaute bei mysqldump.exe + PowerShell

Andere Skripts dieser Art schreiben zwar einen SQL-Dump, doch schaut man näher hin, sind die Umlaute zerschossen. 

Der Grund hierfür:
PowerShell kodiert den bereits UTF8-kodierten Stream von mysqldump.exe nochmals als UTF8, was das Ganze am Ende zuverlässig shreddert. Solche Backups sind nicht mehr oder nur unter großem Korrekturaufwand zurücklesbar.

Die Lösung für korrekte Zeichenkodierung in MySQL Backups per PowerShell

Der Trick ist nun der: Man startet mysqldump.exe aus PowerShell heraus in einem regulären Shell-Prozess. Somit bleibt alles sauber UTF8-kodiert, da PowerShell keinen Zugriff auf den Output-Stream hat.

Doch nun zum Backup-Skript:

Da die Backups komprimiert gespeichert werden, benötigen wir vorab 7-Zip, Download hier.

Standardmässig ist das Ausführen von PowerShell Scripts in Windows 11 aus Sicherheitsgründen abgeklemmt. Um die Sperre aufzuheben starten wir eine PowerShell per Rechtsklick als Admin und geben den folgenden Befehl ein:

Wir bestätigen mit A für “Alle”. Von nun an sind lokal erstellte Skripts erlaubt, aus dem Internet geladen Skripts jedoch nicht.

Windows 11: Die Konfiguration des PowerShell MySQL Backup-Skripts

Die verwendeten Konfigurations-Variablen haben die folgende Bedeutung:

  • PATH_MYSQL:
    Der Pfad zum “bin” Ordner des MySQL Datenbankservers. Hier befinden sich alle Tools, die MySQL mitbringt. Unter Anderem das von uns benötigte mysqldump.exe. Bitte auf den Backslash (“\”) am Ende achten.
  • PATH_ZIPTOOL:
    Der Pfad zur 7-Zip-Installation. Hier benötigen wir 7z.exe. Bitte auf den Backslash am Ende achten.
  • PATH_BACKUP:
    Der Pfad in dem unsere MySQL Backups gespeichert werden sollen, ebenfalls mit Backslash am Ende.
  • HOLD_DAYS:
    Die Anzahl der Tage nach denen Backups automatisch gelöscht werden.
  • MYSQL_USR und MYSQL_PWD
    Der Datenbank User und dessen Passwort.
  • MYSQL_DB:
    Der Name der zu sichernden MySQL Datenbank.

Das Skript speichern wir unter dem Namen “backup-mysql.ps1”.

Powershell Script im Windows Taskplaner (Aufgabenplaner) starten

Folgendes ist beim Anlegen des Tasks zu beachten:

Wir starten nicht das Skript direkt, sondern

Als Parameter übergeben wir in einer einzigen Zeile den PowerShell Switch um die Execution-Policy zu ignorieren und den absoluten Pfad zum Script:

Das ist bereits alles – viel Spass beim Sichern :-)

 

 

 

Hat Dir der Beitrag gefallen?

Wenn Du Fragen oder Anmerkungen zu diesem Beitrag hast, dann starte einen Kommentar. DANKE für Dein Feedback!