如何限制通过cronjob创建的数据库的备份文件?

问题描述:

我正在使用脚本将我的数据库备份到一个ftp文件夹中。我的问题是,我每天都通过cronjob执行脚本,恐怕会造成太多的备份。所以我想保持总是只有三个备份。如何限制通过cronjob创建的数据库的备份文件?

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

您是否面临**编码**问题,或只是要求某人去完成这项工作? –

+1

你可以推出自己的,但我会考虑使用'logrotate'来做这种事情。请参阅** [这里是关于如何操作的基本信息。](https://scottlinux.com/2011/03/04/rotate-mysql-backups-with-logrotate/)** – YvesLeBorg

我找到了一个解决方案:

我改变这一行..

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

..into这一行:

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

所以我只保留七个备份。因为一个星期后旧的被覆盖。

+1

这是一个简单的方法,我喜欢它。 – calexandre