标签:
众多数据库服务器的管理过程中,在不同服务器间的文件传输是免不了的。您可以使用scp命令或FTP方法完成文件的发送和接收,这篇文章我将给大家介绍另外一种方法,这就是rsync命令。
rsync是文件传输程序,它的功能和算法描述可以参考维基百科中的介绍。
参考链接:http://zh.wikipedia.org/zh-cn/Rsync
我来通过实验给大家展示一下rsync命令的常用方法。
这里我们演示使用的操作系统是Linux,rsync已经预装好。如果是AIX操作系统,需要单独在IBM网站下载安装包安装。
演示场景:将secDB1服务器SRC目录下的内容同步传输到secDB2服务器DEST目录下,整个过程在secDB1服务器上来完成。
1.在第一台主机的根目录下创建一个名为“/usr/20160626”的目录,作为我们传输演示的源目录。
[root@secDB1 /]# mkdir /usr/20160626
2.创建文件,根据日期生成文件夹,并拷贝每日生成的文件到新的文件夹中
datestr=$(date +%Y%m%d)
mkdir $datestr
cp $(find /orcl/dir -name "*$datestr.txt" ) /orcl/$datestr/
3.在第二台主机的根目录下创建一个名为“test”的目录,作为我们传输演示的目标目录
[root@secDB2 /]# cd /usr
[root@secDB2 /]# mkdir /test
4.将secDB1服务器20160926目录下的内容同步传输到secDB2服务器test目录下
[root@secDB1 SRC]# rsync -av "ssh -i /usr/rsync_id_dsa" /orcl/20160926/ csdn@61.132.54.173:/usr/test
root@172.17.193.211‘s password:
building file list ... done
./
pos898321045110581_20160926.txt
pos898321045110582_20160926.txt
pos898321045110583_20160926.txt
pos898321045110584_20160926.txt
pos898321045110593_20160926.txt
pos898321045110594_20160926.txt
pos898321045110595_20160926.txt
pos898321045110596_20160926.txt
sent 162 bytes received 70 bytes 42.18 bytes/sec
total size is 0 speedup is 0.00
5.验证第二台主机的test目录下是否有发送过来的文件
[root@secDB2 /]# cd /test
[root@secDB2 DEST]# ls -ltr
total 0
-rw-r--r-- 1 root root 0 Feb 21 02:37 f1
-rw-r--r-- 1 root root 0 Feb 21 02:37 f2
文件发送成功,目的达到。
6.修改test目录下的f1文件内容,使之与源目录SRC中的f1目录不相同
[root@secDB2 DEST]# echo "mod" > f1
[root@secDB2 DEST]# cat f1
mod
[root@secDB2 DEST]# ls -ltr
total 4
-rw-r--r-- 1 root root 0 Feb 21 02:37 f2
-rw-r--r-- 1 root root 4 Feb 21 02:59 f1
7.再次将20160926目录下的内容向test目录同步
[root@secDB1 SRC]# rsync -av /SRC/ -e ssh root@172.17.193.211:/DEST
root@172.17.193.211‘s password:
building file list ... done
f1
sent 114 bytes received 48 bytes 46.29 bytes/sec
total size is 0 speedup is 0.00
注意,此时仅仅将有变化的内容f1同步到了test目录,这也是rsync命令的优势所在。
8.在经过再次同步之后,此时DEST目录下的文件再一次与SRC目录下的内容保持一致。
[root@secDB2 DEST]# ls -ltr
total 0
-rw-r--r-- 1 root root 0 Feb 21 02:37 f1
-rw-r--r-- 1 root root 0 Feb 21 02:37 f2
9.注意“/”符号带来的差别
如果将“/SRC/”后面的“/”去掉,此时将会将SRC目录和目录的下的所有内容统统的发送到DEST目录下。
[root@secDB1 SRC]# rsync -av /SRC -e ssh root@172.17.193.211:/DEST
root@172.17.193.211‘s password:
building file list ... done
SRC/
SRC/f1
SRC/f2
sent 166 bytes received 70 bytes 67.43 bytes/sec
total size is 0 speedup is 0.00
10.使用rsync命令的联机帮助文档可以获得更多的提示信息
[root@secDB1 SRC]# rsync -h
……此处内容省略……
11.小结
rsync在给我们传输文件提供另外一种途径的同时,也提高了我们的工作效率。在存在少量差异需要完成文件同步的场合下是不二选择。善用之。
Good luck.
-------------------------------------------------------------------------------------------------------------------------------------
二、取消输入密码
问题描述
在linux平台上常用rsync协议来同步文件和目录,‘rsync‘也是各种linux发行版标配的命令。当我们基于linux平台开发应用程序时,常常需要从Java或者Python代码中调用rsync命令来实现文件的传输。
例如,假设我们要按照如下需求来传输文件:
要实现rsync的无密码传输,基本思路是用一对公私钥来代替帐户密码,实现ssh连接时的认证。
下面我们来看看一步步如何实现。
配置rsync
1. [远端机器] 创建专用帐户csdn
注意:
2. [本地机器] 用ssh-keygen生成密钥
注意:
3. [本地机器] 将公钥传送到远端机器csdn帐户的.ssh目录下
4. [远端机器] 将传输过来的公钥导入csdn的authorized_keys文件
rsync命令
这样,我们就可以免输密码在两机器间同步文件和目录了,比如,一个最简单的命令:
值得注意的是,当从Java或Python代码中构建rsync命令时,有时很难将-e "ssh -i xxxx"作为一个普通的command option,这里有一个简单的替代方法,就是在启动rsync命令之前,往rsync进程中添加一个环境变量:RSYNC_RSH="ssh -i xxxx"
上面只是一个最简单的rsync命令,其实rsync有许多有意思的选项,可以帮助我们完成很多高端大气上档次的功能。比如,下面是一个更加复杂的命令,用来在两台机器间传输整个目录并在传输完成后删除源文件:
具体参数的含义可参考rsync文档,这里仅作简单说明:
标签:
原文地址:http://www.cnblogs.com/fenglan/p/5916170.html