Häufig will man alle Datenbanken auf einem Server sichern. Das geht mit der Option "--all-databases" von mysqldump. Dabei werden jedoch alle Datenbanken in den gleichen Dump gespeichert, was bei einem Restore sehr mühsam sein kann.
Unter Linux habe ich deshalb schon länger folgendes Script im Einsatz:
#!/bin/sh
# Backupscript fuer MySQL
USER=root
PASSWD=geheim
BACKUPDIR=/backup/mysql
DATABASES=`mysql -u$USER -p$PASSWD -e"show databases"`
for DATABASE in $DATABASES
do
if [ $DATABASE != "Database" ]; then
mysqldump -u$USER -p$PASSWD $DATABASE > $BACKUPDIR/$DATABASE"_dump"
fi
done
Es holt sich zuerst mit "SHOW DATABASES" eine Liste aller vorhandenen Datenbanken, und speichert danach jede einzeln mit mysqldump in eine Datei.
Heute wurde ich gefragt, wie man das unter Windows lösen kann. Ich habe deshalb das Script in VBScript geschrieben (normalerweise ist mir C# lieber, aber für so ein Script ist VBS nicht schlecht):
'MySQL Backup Script
'28.04.08 / mkr
'sichert alle vorhandenen MySQL-Datenbanken in einzelne Dateien
'ausführen mit "cscript mysql_backup.vbs"
'Konfiguration
server = "127.0.0.1"
user = "root"
pw = "geheim"
mysql = "c:\programme\mysql\bin\mysql.exe"
mysqldump = "c:\programme\mysql\bin\mysqldump.exe"
backupdir = "c:\backup\mysql\"
'ab hier nichts mehr ändern
Set objShell = CreateObject("WScript.Shell")
'Datenbanken auflisten
'WScript.Echo mysql & " --host=" & server & " -u" & user & " -p" & pw & " -e""SHOW DATABASES"""
Set objWshScriptExec = objShell.Exec(mysql & " --host=" & server & " -u" & user & " -p" & pw & " -e""SHOW DATABASES""")
Set objStdOut = objWshScriptExec.StdOut
Do Until objStdOut.AtEndOfStream
db = objStdOut.ReadLine
If db <> "Database" Then
dateiname = db & "_dump.txt"
WScript.Echo "sichere Datenbank " & db & " nach " & backupdir & dateiname
objShell.Run(mysqldump & " --host=" & server & " -u" & user & " -p" & pw & " --result-file=" & backupdir & dateiname & " " & db)
End If
Loop
Sollte selbsterklärend sein. Vielleicht kann es ja jemand brauchen.