Site icon Franky's Web

Strato Datenbank Backup mit PowerShell via SSH/SFTP

Dieser Blog läuft mit WordPress und wird von Strato gehostet. Es gibt zwar unzählige Backup PlugIns für WordPress, doch ich habe bisher keins gefunden, welches meine Anforderungen erfüllt. Ich möchte eigentlich nur ein Backup der WordPress mySQL Datenbank auf meiner NAS ablegen und dazu meine NAS nicht per FTP oder SSH öffentlich im Internet verfügbar machen.

Ich habe mir daher ein kleines PowerShell Script gebastelt, welches per Taskplaner von meinem lokalem Server ausgeführt wird und sich per SSH und SFTP zu Strato verbindet. Per SSH wird zunächst ein Backup der Datenbank erzeugt, welches im Anschluss runtergeladen wird.

Im Prinzip lässt sich das Script auch mit jedem anderen Hoster oder mySQL Server verwenden, wenn der Server per SSH und SFTP erreichbar ist, daher stelle ich das Script in vereinfachter Form mal hier ein:

$sshserver = "ssh.strato.de"
$sshuser = "domain.de"
$sshpass = "MasterPassword"
$dbname = "DB1234567"
$dbhost = "rdbms.strato.de"
$dbuser = "U1234567"
$dbpass = "DatabasePassword"
$backuppath = "D:\Backup"

$sshpass = $sshpass | ConvertTo-SecureString -AsPlainText -Force
$Creds= New-Object System.Management.Automation.PSCredential -ArgumentList $sshuser, $sshpass

#Load Posh Module
try
{
	Import-Module Posh-SSH
}
catch
{
	write-host "Failed to load Posh"
}

#Create Database Backup

try
{
	[string]$backupfilename = "$dbname" + "_" + (get-date -Format ddMMyyyy) + ".sql"
	$sshsession = New-SSHSession -ComputerName $sshserver -Credential $creds -AcceptKey:$true
	[string]$backupcmd = "mysqldump $dbname --add-drop-table -h $dbhost -u $dbuser -p$dbpass > $backupfilename"
	$backupdb = Invoke-SSHCommand -Index $sshsession.index -Command "$backupcmd"
}
catch
{
	write-host "Backup failed"
}

#Download Backup File

try
{
	$sftpsession = New-SFTPSession -ComputerName $sshserver -Credential $creds
	$backupfile = Get-SFTPFile -Index $sftpsession.index -RemoteFile $backupfilename -LocalPath $backuppath
}
catch
{
	write-host "Backup download failed"
}

#Delete Backup File from webserver

try
{
	$deletecmd = "rm " + "$backupfilename"
	$deletefile = Invoke-SSHCommand -Index $sshsession.index -Command "$deletecmd"
}
catch
{
	write-host "Could not delete Backup on webserver"
}

#Disconnect Session

try
{
	$disconnect = remove-sshsession -index $sshsession.index
	$disconnect = Remove-SFTPSession -Index $sftpsession.index
}
catch
{
	write-host "Could not disconnect SSH/SFTP Session"
}

#Verify
try
{
	test-path "$backuppath\$backupfilename"
}
catch
{
	write-host "Verify failed"
}

Vorausetzung für das Script ist das SSH Powershell Modul, welches hier runtergeladen werden kann:

Das Script lässt sich einfach erweitern, zum Beispiel um einen Bericht bei Fehler/Erfolg per Mail zu verschicken. In der oben angegeben Form wird allerdings nur das Datenbank Backup erzeugt und runtergeladen:

Vieleicht kann es ja jemand gebrauchen…

Exit mobile version