小智 6
以下是我所做的两个示例:一个用于文件,另一个用于 MySQL。两者都是拉式解决方案;您的本地机器登录到远程机器并检索文件。但是,本地机器会告诉远程机器准备存档。
我使用 crontab 和无密码身份验证和 ssh 在远程机器上存档和 gzip,然后通过 ssh 将 gzip 的输出定向到本地机器。确保设置了crontab 和无密码身份验证。我也有一些清理单衬。
这样做的好处是它可以最有效地使用带宽。缺点是它更占用资源,但在现代硬件上,我怀疑这很重要,除非您正在处理荒谬的大文件。
这可能是你关心的部分。告诉 ssh 在远程机器上执行 tar 和管道到 gzip 。让 gzip 将压缩文件写入标准输出(c标志)并将输出定向到本地机器上的文件。
00 00 * * * /usr/bin/ssh login@host "sudo tar -cf - -C /path/to/directory/to/backup/ file_to_back_up | gzip -9c" > /file/on/local/machine/BackUp_$(date +\%Y-\%m-\%d-\%Hh\%Mm\%Ss_\%A).tar.gz
重要:file_to_back_up是您实际备份的文件;它可以是文件或目录。也可以是一系列文件:file1.txt、file2.php等。
该9标志是最大 gzip 压缩。
该-cf -标志和参数来创建一个新的存档和吐数据到标准输出。该-C标志告诉 tar 从与当前目录不同的目录开始。file_to_back_up 可以是文件或目录。这将许多无关的相对路径保留在存档之外。如果您想备份主目录中的某些内容,我想您可以省略,-C /path/to/directory/to/backup/因为默认情况下 ssh 会将您登录到您的主目录中。
date +\%Y-\%m-\%d-\%Hh\%Mm\%Ss_\%A 将生成一个时间戳,如 2015-03-19-08h58m09s_Thursday
crontab 列00 00 * * *基本上意味着每天午夜。
与上述类似。需要注意的是,您需要确保您的 mysql 访问也可以是无密码的;安全的方法是使用 .cnf 文件。如果您不使用 MySQL,请跳过本节,但该概念可以延续到其他工具。
30 0,13 * * * /usr/bin/ssh user@remote.host "mysqldump --defaults-file=.my.database.cnf -uroot databasename | gzip -9c" > /path/to/databasebackup_$(date +\%Y-\%m-\%d-\%Hh\%Mm\%Ss_\%A).sql.gz
.cnf 文件包含登录凭据,因此您不必通过 shell 传递它们,以便ps其他用户看到它们。它应该包含:
[client]
user=mysqluser
password=yourpassword
host=localhost
根据您的设置,您可能需要为不同的项目/数据库提供一堆这些。如果不这样做,默认使用 .my.cnf。
安全性:您可能希望这样chmod 600 *.cnf做只有所有者才能读写此文件。
我倾向于使用该find命令自动删除超过五天的备份,除非它们落在星期五。我存档星期五更长。这就是我在文件名中包含星期几的原因。
小智 5
是的,一些例子:
tar cvjf - * | ssh user@host "(cd /desired/path; tar xjf -)"
tar cvzf - dir/ | ssh user@host "cat > /backup/dir.tar.gz"
tar cvzf - dir/ | ssh user@host "dd of=/backup/dir.tar.gz"
ssh user@host "cat /backup/dir.tar.gz" | tar xvzf -
tar cvjf - * | ssh root@host "(cd /desired/path; tar xjf - )"
Run Code Online (Sandbox Code Playgroud)
备份远程计算机并将 tar 保存到本地计算机
ssh user@host "(cd /desired/path; tar cvzf - *)" > /path/to/backup.tar.gz
Run Code Online (Sandbox Code Playgroud)
其他用法示例: https: //blog.bravi.org/?p =259
| 归档时间: |
|
| 查看次数: |
10783 次 |
| 最近记录: |