Zum Sichern meiner MySQL-Datenbanken auf meinem Webserver habe ich mir ein kleines Script geschrieben. Auf Linux-Seite sieht es wie folgt aus. Es erstellt mittels mysqldump Sicherungen meiner Datenbanken und legt diese als tar-Archiv in ein per FTP zugängliches Verzeichnis. Alternativ könnte man diese Datei per Mail verschicken, aber das wollte ich nicht, um meinen Posteingang nicht zuzumüllen.
#!/bin/bash
NOW=$(date +%Y-%m-%d)
DBS="db1 db2 db3"
BUPATH=/home/ftp/backup/db/
BUFILE=DBs_${NOW}.tar
for DB in $DBS
do
mysqldump $DB -u root --password=geheim > ${BUPATH}${NOW}_${DB}.sql
done
cd ${BUPATH}
tar --remove-files -czf ${BUFILE} ${NOW}*
Jetzt muss ich nur noch jeden Tag (oder wann es mir passt 😉 ) das Archiv vom Server holen. Auch dafür habe ich mir ein Script erstellt. Natürlich ganz modern mit der Powershell:
$Server = "123.123.123.123";
$User = "ftpuser";
$Password = "ftppass";
$Yesterday = (get-date -date ((get-date).AddDays(-1)) -uFormat "%Y-%m-%d");
$BUFile = "DBs_$Yesterday.tar";
# Backup path = current path
$BUPath = (Split-Path -Parent $MyInvocation.MyCommand.Path) + "\";
function ExecuteFTPCommands($FileCommand)
{
$FtpCommandFilePath = [System.IO.Path]::GetFullPath("FTPCommand.tmp");
$FtpCommands = @( $User, $Password, "cd db", "bin", "quote pasv", $FileCommand, "quit" );
$FtpCommand = [String]::Join( "`r`n", $FtpCommands );
set-content $FtpCommandFilePath $FtpCommand;
ftp "-s:$FtpCommandFilePath" $Server;
remove-item $FtpCommandFilePath;
}
# check whether backup file has already been downloaded
if (Test-Path $BUPath$BUFile)
{
write-host ("Backup file for yesterday has already been downloaded: " + $BUPath + $BUFile) -foregroundcolor "red";
# check file size
$dFile = get-item $BUPath$BUFile;
if ($dFile.Length -eq 0)
{
write-host "Size of backup file is 0..." -foregroundcolor "red";
}
else
{
exit;
}
}
write-host "Downloading vServer backup for yesterday ($Yesterday)..." -foregroundcolor "green";
$FtpDownloadCommand = 'GET "' + $BUFile + '"';
ExecuteFTPCommands([string]$ftpDownloadCommand);
Move-Item $BUFile $BUPath -force;
Das Script lädt immer die Datei des vorigen Tages herunter, da ich mein Backup-Script als Cronjob in der Nacht laufen lasse und das Archiv quasi rückwirkend für jeden Tag angelegt wird. Das Powershell-Script habe ich dann wie hier beschrieben auf meinem Desktop verknüpft. Somit kann ich einfach durch einen Doppelklick mein Server-Backup herunterladen. Das sieht dann so aus: