所以我做了很多谷歌搜索,我还没有找到答案。我有一台服务器需要上线并快速响应 - 我不希望我的访客/客户等待。但是,我已经有足够的服务器问题知道我需要一个好的备份,而不是每当我觉得我现在有备份时。
当我在这台服务器上尝试过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的单个命令会很棒,但据我所知,这可能是不可能的。
由于
答案 0 :(得分:0)
像
这样的东西rsync -azrR --include='*.log' -f 'hide,! */' /media/primary /backup
如果您使用man rsync
并输入2343g
,则应转到解释此过滤器的行。基本上它会隐藏模式匹配中不是目录(每个文件)的所有内容;但是,因为我已经使用了--include='*.log'
标志,它将覆盖它,并且该模式将仅匹配.log
个文件。您还可以使用-nv
标志进行干运行,看看会发生什么。