Ich verwende ein Skript, um meine Datenbank in einem FTP-Ordner zu sichern. Mein Problem ist, dass ich das Skript jeden Tag über Cronjob ausführe und ich befürchte, dass zu viele Backups erstellt werden. Also ich möchte immer nur drei Backups behalten.Wie kann ich die Backup-Dateien meiner Datenbank begrenzen, die ich über Cronjob erstellt habe?
db_backup.phpx:
<?php
######## einstellungen #############################################
$db_name = "IhreDatenBank";
$db_passwd = "IhrDatenBankPasswort";
$downloadlink_erstellen = "ja";
$bestaetigungsmail_senden = "ja";
$bestaetigungsmail_adresse = "IhreMailAdresse";
$bestaetigungsmail_betreff = "[BACKUP] Ihr Backupscript";
$sql_file = "dump_" . $db_name . "_" . date('Ymd_Hi') . ".sql";
####################################################################
### daten überprüfen
if ($db_name == "IhreDatenBank" or $db_passwd == "IhrDatenBankPasswort")
{
die("FEHLER: Sie müssen zunächst Ihre Datenbankdaten im Script eingeben!");
}
if (file_exists($sql_file) or file_exists($sql_file . ".gz"))
{
die("FEHLER: Das zu erstellende Dump existiert bereits!");
}
## dump erstellen
exec("mysqldump -u $db_name -p'$db_passwd' --quick --allow-keywords --add-drop-table --complete-insert --quote-names $db_name >$sql_file");
exec("gzip $sql_file");
### größe ermitteln
$datei = $sql_file . ".gz";
$size = filesize($datei);
$i = 0;
while ($size > 1024)
{
$i++;
$size = $size/1024;
}
$fileSizeNames = array(" Bytes", " KiloBytes", " MegaBytes", " GigaBytes", " TerraBytes");
$size = round($size,2);
$size = str_replace(".", ",", $size);
$groesse = "$size $fileSizeNames[$i]";
### nachricht erstellen
$message = "Ihr Backup der Datenbank <b>" . $db_name . "</b> wurde durchgeführt.<br>";
$message .= "Die Größe des erstellten Dumps beträgt <b>" . $groesse . "</b>.<br>";
if ($downloadlink_erstellen == "yes" or $downloadlink_erstellen == "ja" or $downloadlink_erstellen == "1")
{
$link = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
$link = str_replace(basename(__FILE__),$datei,$link);
$message .= "Downloadlink: <a href=" . $link . ">" . $datei . "</a>";
}
## nachricht ausgeben
echo $message;
### mail versenden
if ($bestaetigungsmail_senden == "yes" or $bestaetigungsmail_senden == "ja" or $bestaetigungsmail_senden == "1")
{
if(!preg_match('/^([a-zA-Z0-9])+([.a-zA-Z0-9_-])*@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-]+)+/' , $bestaetigungsmail_adresse))
{
echo "<br>FEHLER: Mail konnte nicht versendet werden, da die Adresse ungültig ist!";
}
else
{
mail($bestaetigungsmail_adresse, $bestaetigungsmail_betreff,
$message,"From: [email protected]{$_SERVER['SERVER_NAME']}\r\n" . "Reply-To: [email protected]{$_SERVER['SERVER_NAME']}\r\n" . "Content-Type: text/html\r\n")
or die("FEHLER: Mail konnte wegen eines unbekannten Fehlers nicht versendet werden");
echo "<br>Bestätigungsmail wurde erfolgreich versandt!";
}
}
?>
Stehen Sie vor irgendwelchen ** Coding ** -Problemen, oder fragen Sie einfach jemanden, der den Job macht? –
können Sie Ihre eigenen rollen, aber ich würde 'logrotate' verwenden, um diese Art von Sachen zu tun. Siehe ** [hier für grundlegende Informationen, wie man das macht.] (Https://scottlinux.com/2011/03/04/rotate-mysql-backups-with-logrotate/) ** – YvesLeBorg