注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

有情况

学会慢生活,拥有平常心……

 
 
 

日志

 
 

Linux下使用SSH、Crontab、Rsync三工具实现数据自动备份  

2011-06-22 09:46:46|  分类: 网站相关 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

作为网管人员大概都无一例外的经历过系统备份,尤其是重要系统的备份、重要数据库系统的备份工作。由于备份是个频繁而琐碎的工作,如何能把这个工作做得即简单又灵活呢?下面就来介绍在工具来进行数据的自动备份与同步。
为什么要选择SSH 呢?SSH又是什么呢?可以说它是替代以前Telnet的远程登录工具,SSH的英文全称是Secure Shell。用户可以把所有传输的数据进行加密,这样即使网络中的黑客能够劫持用户所传输的数据,如果不能解密的话,也不能对数据传输构成真正的威胁。而且SSH的数据传输是经过压缩的,可以加快传输的速度,这就是SSH 目前能替代Telnet远程登录工具的原因。
说到安全,SSH提供两种级别的安全验证,一种是基于口令的安全验证。只要用户知道自己账号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但是不能保证用户正在连接的服务器就是用户想连接的服务器,可能会有别的服务器在冒充真正的服务器,这存在着潜在的威胁。一种是基于密匙的安全验证。需要依靠密匙,也就是用户必须为自己创建一对公匙,密钥,并把公用密匙放在需要访问的服务器上。如果需要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求使用用户的密匙进行安全验证。服务器收到请求之后,先在服务器上用户的主目录下找到该用户的公用密匙,然后把它和用户发送过来的公用密匙进行比较。如果两个密匙一致,服务器就用公用密匙加密“质询”并把它发送给客户端软件。客户端软件收到“质询”之后就可以用用户的私人密匙解密再把它发送给服务器。
下面做的就是利用第二种基于密匙的安全验证的登录,具体方法如下:
#ssh-keygen -t rsa
Generation public/private rsa key pair.
Enter file in which to save the key(/root/.ssh/id_rsa):
Enter passphrase(empty for no passphrase):
Enter same passphrase again:
Your identiflcation has been save in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_ras.pub.
The key fingerprint is:
c3:a0:de:f8:24:8e:f6:0d:ed:0a:b0:a2:2d:aa:d3:8b ldomain
使用如下命令把公匙传到需要备份的服务器上:
#ssh 192.168.1.2
#mkdir .ssh;chmod 0700 .ssh
#scp .ssh/id-rsa.pub 192.168.1.2 : .ssh/authorized_keys2
上述命令可以把公钥远程传过去。
这样一个SSH基于密匙的安全验证登录就简单的做完了,现在就可以从192.168.1.1直接用“ssh 192.168.1.2”无密码自动登录过去了,这样就简单而又安全的实现了自动登录目的,可以为下面定时做备份打下前题。
这里把定时触发和同步一起来简单介绍一下,它是用来让使用者在固定时间或固定间隔执行程式之用,下面就介绍一下这个命令的常用参数。
-e执行文字编辑器来设定时程表,内定的文字编辑器是VI,如果你想用别的文字编辑器,则请先设定VISUAL环境变数来指定使用那个文字编辑器(比如说setenvVISUALjce)。
f1 f2 f3 f4 f5 command
其中,f1是表示分钟,f2表示小时,f3表示一个月份中的第几日,f4表示月份,f5表示一个星期中的第几天。Command表示要执行的命令。当f1为时表示每分钟都要执行command,f2为*时表示每小时都要执行程式,其余类推。当f1为a-b时表示从第a分钟到第b分钟这段时间内要执行,f2为a-b时表示从第a到第b小时都要执行。当f1为*/n时表示每n分钟个时间间隔执行一次,f2为*/n表示每n小时个时间间隔执行一次,其余类推。当f1为a,b,C,......时表示第a,b,C,......分钟要执行,f2为a,b,C,...... 时表示第a,b,C,......个小时要执行,其余类推。当然也可以将要定时执行的命令存放在预备文档里,这里就得用crontab file的方式来设定时程表。
现在来介绍一下如何让数据同步的一个工具,的主要参数:
-q,--quiet 安静模式,几乎没有信息产生.常用在以cron执行rsync;
-a,--archive archive mode权限保存模式,相当于-rlptgoD 参数;
-O,--owner保留档案所有者(root only);
(root only);
#rsync -ave ssh 192.168.1.2:/home/ftp/pub/ /home/ftp/pub/
需要注意的是,源端目录名称末尾的/。在源说明中后缀/通知rsync复制该目录的内容,但不复制目录文件自身。要想把目录包含在要复制内容的最顶层就要去掉/;
使用SSH传输rsync流量具有下述优点,可通过网络加密数据,而且速度非常快,使用SSH客户端密钥建立的任何信任关系。如果要在两台计算机之间保持大型、复杂目录结构的同步性(尤其是两者间的差异很小时),那么rsync就是一种使用起来极为方便(并且执行速度很快)、随心所欲的工具。
#crontab -e
0 17 * * 1-5 rsync -ave ssh 192.168.1.2:/my /my
上面的操作"crontab-e"命令是编辑定时启动脚本,然后在周一到周五的每天下午5点执行SSH远程自动登录然后把192.168.1.2的/my目录下的所有东西同步到本地的/my目录下,这样就达到了自动数据同步备份的目的了。

使用 rsync 更轻松更快速地同步两台机器(比如笔记本计算机和桌面计算机),这提供一种高效的算法和多种选项。另外,如果不喜欢命令行操作,还可以通过几个图形化工具更简便地使用 rsync。 
如果您同时使用笔记本计算机和桌面计算机,就可能需要及时地同步它们。另外,除了在家里运行同步之外,还可能希望从远程站点运行同步;就拿我来说,我在旅途中使用笔记本计算机,在此期间希望确保把在笔记本上做的工作备份到桌面计算机上。(丢失笔记本并因此丢失所有工作是真正的大灾难!)对于这个问题有许多解决方案:本文介绍一种工具 — rsync — 和几种相关工具,它们都提供简便的同步过程。

什么是 Rsync 命令?

rsync 应用程序是在 Linux? 和 UNIX? 上广泛使用的文件传输和同步程序,而且它已经移植到了 Windows? 上。它的关键特性是一个非常快的算法,它只通过数据链路发送文件差异,因此把机器之间传输的数据总量降低到最低限度。(如果使用 File Transfer Protocol [FTP] 或 rcp 和 scp 等实用程序,那么即使只修改了一个字节,也会发送完整的文件)。当然,rsync 并非只能处理现有的文件:它还可以处理只在链路一端存在的文件和目录。最后,通过压缩数据来优化通信,因此可以通过非宽带连接使用这个工具。

rsync 的状态

rsync 实用程序最初是由 Samba 的开发者 Andrew Tridgell 开发的。这个软件采用 GNU General Public License (GPL),它的当前版本是 2008 年 12 月发布的 3.0.5。 

获取并安装 rsync

可以找到针对大多数当前 Linux 发行版预编译的二进制包,首先应该找到适合自己的包。我使用 Smart 对 OpenSUSE 进行包管理,所以只需使用 sudo smart install rsync 命令安装 rsync 的最新版本。如果您喜欢自己进行编译,那么可以获取源代码(见 参考资料 中的链接)并用传统的 configure, make, make install 方法安装它;详细步骤参见源代码中的 README 文件。

为了进行安全的通信,需要安装 Secure Shell (ssh)。(可以使用 remote shell [rsh],但是它不够安全)。OpenSSH 是 ssh 的一种免费实现,在所有发行版上都有。还需要在防火墙上打开一个端口,让计算机可以相互连接。这些都是标准配置,更多信息见 参考资料 中的链接。

作为守护进程运行 Rsync 命令

有两种运行 rsync 的方法:作为守护进程运行和根据需要运行。如果只想同步两台计算机,那么选用哪种方法并没有明显的差异。作为守护进程运行 rsync(使用 rsync --daemon 命令)适用于服务器,允许多个不同的用户针对服务器同步自己的计算机。可以通过 man rsyncd.conf 了解可以指定的选项。但是要注意,对于同步笔记本和桌面计算机,不需要使用复杂的配置。 

使用 Rsync 命令

现在,我们使用 rsync 把笔记本计算机直接同步到一个远程服务器。为此,可以使用与 清单 1 相似的代码。还可以把远程服务器同步到笔记本(文件将从服务器发送到笔记本),或者同步两个本地目录,但是不能同步两个远程服务器。

清单 1. 相同 rsync 命令的两个版本


rsync --compress --recursive --delete --links \ --times --perms --owner --group \ --verbose --progress --stats \ --rsh="ssh" \ --exclude "*bak" --exclude "*~" \ /my/path/at/the/laptop/* myserver:/some/path/at/the/server rsync -zrltpogve "ssh" --progress --stats --delete \ --exclude "*bak" --exclude "*~" \ /my/path/at/the/laptop/* myserver:/some/path/at/the/server

注意,清单 1 中选项的次序是任意的,而且大多数选项有短格式。首先,--compress(或 -z)指定将压缩数据,这可以节省带宽。应该总是使用这个选项。(在非常高速的数据链路上,不进行压缩可能也可以,但是对于大多数远程连接,压缩都是有帮助的)。可以使用补充选项 --compress-level=level 指定压缩的级别;但是,通常可以接受标准的压缩级别。

--recursive (-r) 选项让 rsync 递归地复制所有目录。这会复制目录中的所有文件,包括其中的子目录及其内容。如果不需要这个功能,可以使用 --dirs 选项 (-d) 产生相反的效果:跳过子目录及其内容。

在默认情况下,rsync 把需要的文件复制到目标计算机,但是并不删除额外文件。通过使用 --delete 选项,目标目录会与原目录保持完全一致。但是要注意:如果把一个空目录同步到远程目录,就会删除远程目录中的所有内容!

如果原目录中有符号链接,--links 选项(或 -l)会在目标目录中重新创建这些符号链接。另一种方法是使用 --copy-links(或 -L)复制符号链接指向的文件或目录,而不是复制符号链接本身。如果有符号链接指向复制的树之外的文件或目录(这是一种安全风险),可以使用 --copy-unsafe-links。--safe-links 选项忽略这样的链接,这更安全。

后面四个选项(--times、--perms、--owner 和 --group 或 -tpog)分别让 rsync 保持原来的更新时间戳、权限、所有者和组信息。同时指定所有这些选项的简便方法是使用 --archive(或 -a),这还会设置 --recursive 和 --links 选项。

后面三个选项(--verbose、--progress 和 --stats)提供关于 rsync 正在执行的操作的大量信息。如果对这些信息不感兴趣,只需跳过它们,除非出现错误,rsync 会悄悄地运行。

尽管当前的 rsync 版本默认使用 ssh,但是可以使用 --rsh(或 -e)选项强制使用 ssh。如果需要使用额外的 ssh 参数(例如希望让 ssh 使用非标准端口),可以添加这些参数,例如 --rsh "ssh -p 12345"。

可以使用 --exclude 选项(和对应的 --include)选择要同步的文件。在这个示例中,排除了常见的备份文件。应该根据需要排除和包含文件,从而优化发送的内容。

最后,指定源路径和目标路径。不要忘记最后的 /*,否则结果可能不符合期望。可以通过查看文档了解 some/path、some/path/ 和 some/path/* 之间的差异。但是,使用 /* 是最保险的方法。

可以使用 -a 选项 (--archive) 简化清单 1 中的命令,见 清单 2。(如果作为根在服务器上运行 rsync,-a 选项可能会复制一些额外的内容 — 请查阅文档 — 这不是一种安全的做法)。rsync 还有许多选项;可以通过 rsync --help 和 man rsync 了解所有选项。


 
  评论这张
 
阅读(108)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016