2017-05-24 2 views
0

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&uuml;ssen zun&auml;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&uuml;hrt.<br>"; 
$message .= "Die Gr&ouml;&szlig;e des erstellten Dumps betr&auml;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&uuml;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&auml;tigungsmail wurde erfolgreich versandt!"; 
} 
} 
?> 
+1

Stehen Sie vor irgendwelchen ** Coding ** -Problemen, oder fragen Sie einfach jemanden, der den Job macht? –

+1

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

Antwort

1

ich eine Lösung gefunden:

ich diese Linie ändern ..

$sql_file = "dump_" . $db_name . "_" . date('Ymd_Hi') . ".sql"; 

..into dieser Zeile:

$sql_file = "dump_" . $db_name . "_" . date('D') . ".sql"; 

Also behalte ich nur sieben Backups. Denn nach einer Woche wird der alte überschrieben.

+1

Es ist ein einfacher Ansatz, ich mochte es. – calexandre

Verwandte Themen