我目前正在使用以下代码来每天备份我的数据库,它的工作原理很吸引人。
文件名:backup.php
#!/usr/bin/php
<?php
$file = "/home/root/BACKUPS/backup.sql";
$command = "mysqldump -uroot_admin -pkeypw --all-databases > $file";
system($command);
?>
我将其与下面的bat文件脚本一起使用,以压缩由以上代码创建的备份。
文件名:backup.bat
find /home/root/BACKUPS/backup.sql | xargs zip -czvPf /home/root/BACKUPS/$(date +%F)_backup.sql.zip
我需要添加一段代码,该代码还将扫描先前创建的“ $(date +%F)_backup.sql.zip”,并删除任何早于15天的代码;但仅删除* .zip文件;而不是* .php,*。bat,*。sql或error_log。我已经审查了Unable to delete zip folders older than 14 days并编辑了backup.php文件,其中包括他的示例,出于测试目的,将天数从15天(而不是14天)更改为15天,以便现在backup.php文件读取。
文件名:backup.php(已修订)
#!/usr/bin/php
<?php
$file = "/home/root/BACKUPS/backup.sql";
$command = "mysqldump -uroot_admin -pkeypw --all-databases > $file";
system($command);
if (!(Test-Path $folderpath)) {
New-Item -ItemType Directory -Path $folderpath
Write-Host "$folderpath created"
} else {
Write-Host "$folderpath already exists, will remove old items"
$HowOld = -15
Get-ChildItem $Path -Recurse |
where {$_.LastWriteTime -lt (Get-Date).AddDays($HowOld) -and -not $_.PSIsContainer} |
% {Remove-Item $_.FullName -Force -WhatIf}
}
?>
我照原样保留了backup.bat文件。
文件名:backup.php(未更改)
find /home/root/BACKUPS/backup.sql | xargs zip -czvPf /home/root/BACKUPS/$(date +%F)_backup.sql.zip
在吃午饭的时候,我设置了一个测试cron作业,以便在外出时运行两次,结果是没有文件被删除(应该删除其中的一个文件),因此,对于每个文件。
backup.bat文件导致以下反馈。
updating: home/root/BACKUPS/backup.sql ................. (in=179151470) (out=31552561) (deflated 82%)
Enter comment for home/root/BACKUPS/backup.sql:
enter new zip file comment (end with .):
total bytes=179151470, compressed=31552573 -> 82% savings
这里是backup.php文件的结果。
Status: 500 Internal Server Error
Content-type: text/html; charset=UTF-8
有人对如何进行这项工作有任何建议吗?
UPDATE 10/16/2019 1601HRS EST
文件名:backup.php现在具有以下脚本...
#!/usr/bin/php
<?php
$file = "/home/root/BACKUPS/backup.sql";
$command = "mysqldump -uroot_admin -pkeypw --all-databases > $file";
system($command);
?>
[文件名:backup.bat现在具有以下脚本...
find /home/root/BACKUPS/backup.sql | xargs zip -czvPf /home/root/BACKUPS/$(date +%F)_backup.sql.zip
find /home/root/BACKUPS/ -mtime +14 -type f -iname '*.backup.sql.zip' -exec rm {} \;
此操作不会删除应删除的文件。我不确定我缺少什么;也许是“;”第一行之后。尽管第一行通过压缩和命名sql文件而正常运行。第二行是不起作用的行,它是带有';'的行。所以也许我需要将其删除。一次尝试将两者排除在外;或两者兼有。
无法评论。
我想你想要这样的shell命令:
find /home/root/BACKUPS/ -mtime +15 -type f -iname '*.backup.sql.zip' -exec rm {} \;
编辑:
某些解释:这会查找并删除(-exec rm {} \;)所有名称以“ backup.sql.zip”结尾且修改时间超过15天(mtime +15)的文件(类型f)。
希望有帮助。