0

所以我做了一些谷歌搜索,但我还没有找到答案。我有一台需要运行并快速响应的服务器——我不希望我的访问者/客户等待。但是,我已经有足够的服务器问题知道我需要一个好的备份,而不是我现在想要的备份。

当我在这台服务器上尝试 mysqldump 和 tar 时,它可以工作,但会使服务器在几个小时内都很慢。它还可能导致硬盘驱动器被填满(如果我忘记删除旧备份太久),这会导致 MySQL 和扩展我的站点。放慢服务器速度是不可接受的,因此我迄今为止的备份仅在最常见的慢日/时间每周发生一次。但是,我不喜欢这种解决方案。

所以我现在有另一台服务器,我已将其设置为主服务器的近实时备份。我正在设置 MySQL 复制和每日 rsync。然后可以从此备份服务器运行每日 mysqldump 和 tar,而不会影响主服务器上的响应时间。很好,除了我想更进一步。

我有许多数据文件全天被捕获——比如日志文件和基本的访问者跟踪文件(IP、引荐来源、用户代理,没什么邪恶的)——不需要实时处理,我已经决定最好让这个备份服务器处理这些文件,而不是占用我的主服务器的资源。不过,这给我带来了一个问题。我想将这些文件从主服务器上移到我的备份服务器上进行处理。这些文件分散在许多目录中,并且目录列表只会随着时间的推移而增长。所以我想避免现在在多个目录上运行 mv 并且必须继续维护该列表 - 一些新目录最终会被遗忘。

所以我已经在备份服务器上的 /media 文件夹下的主服务器上安装了必要的目录。如果我只想复制文件,我会使用 scp 但我想移动它们。所以我想要一个执行以下操作的命令:

mv /media/primary/*.log /backup/.

其中 mv 命令递归地查看 /media/primary 文件夹并通过目录向下到每个子文件夹,以查找任何具有 .log 扩展名的文件。然后将该文件从 /media/primary/ 移动到 /backup 上的等效文件夹。因此,例如,如果我在目录 /media/primary/tool1/logs 和 /media/primary/tool2/logs 中有日志文件,我希望它们移动到 /backup/tool1/logs 和 /backup/tool2/logs分别。如果文件夹丢失,我希望(但不要求)该命令创建文件夹。一旦正确移动文件,就可以在备份服务器上的本地硬盘驱动器上处理和重命名/删除文件。

我在两台机器上都在 Ubuntu 12.04 服务器上。我主要在 PHP 中工作,所以我一直在为备份服务器创建一个 PHP 脚本,以便每天执行。该脚本可以通过 SSH (phpseclib) 执行系统命令。

CLI 的单个命令会很棒,但我知道这可能是不可能的。

谢谢

4

1 回答 1

0

像这样的东西怎么样

rsync -azrR --include='*.log' -f 'hide,! */' /media/primary /backup

如果您使用man rsync并键入2343g它,它应该会将您带到解释此过滤器的行。基本上它会从模式匹配中隐藏所有不是目录(每个文件)的东西;但是,由于我也使用了该--include='*.log'标志,因此它将覆盖该标志,并且该模式将仅匹配.log文件。您还可以使用该-nv标志进行试运行,看看会发生什么。

于 2013-08-27T03:19:05.020 回答