众多数据库服务器的管理过程中,在不同服务器间的文件传输是免不了的。您可以使用scp命令或FTP方法完成文件的发送和接收,这篇文章我将给大家介绍另外一种方法,这就是rsync命令。rsync是文件传输程序

rsync也分服务器端和客户端,使用man查看帮助信息,我们发现rsync有六种不同的工作模式:

Local:  rsync [OPTION...] SRC... [DEST] 
  

       Access via remote shell: 
  
         Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST] 
  
         Push: rsync [OPTION...] SRC... [USER@]HOST:DEST 
  

       Access via rsync daemon: 
  
         Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST] 
  
               rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST] 
  
         Push: rsync [OPTION...] SRC... [USER@]HOST::DEST 
  
               rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST 
  

       List remote files: rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]

  1. 拷贝本地文件;当SRC和DES路径信息都不包含有单个冒号":"分隔符时就启动这

种工作模式。
  2.使用一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器

。当DST
路径地址包含单个冒号":"分隔符时启动该模式。
  3.使用一个远程shell程序(如rsh、ssh)来实现将远程机器的内容拷贝到本地机器

。当SRC
地址路径包含单个冒号":"分隔符时启动该模式。
  4. 从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含"::"分隔符时启动

该模式。
  5. 从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含"::"分隔符时启

动该模式。
  6. 列远程机的文件列表。这类似于rsync传输,不过只要在命令中省略掉本地机信

息即可。
下面以实例来说明:
  # rsync -vazu -progress cnangel@10.1.6.160:~/works/ ~/works
  v:详细提示 
  a:以archive模式操作,复制目录、符号连接,等价于 -rlptgoD 。
  z:压缩
  u:只进行更新,防止本地新文件被重写,注意两者机器的时钟的同时
  -progress:指显示
  以上命令是保持客户机10.1.6.160上的$HOME/works目录和当前机器的$HOME/works目录同
步。
这经常是我们所说的镜像同步就是这么来的,如果断点续传呢?rsync完全可以做到这一点。man手册再次告诉我们:

--partial 
  
      By default, rsync will delete any partially  transferred  file  if  the  transfer  is 
  
      interrupted. In some circumstances it is more desirable to keep partially transferred 
  
      files. Using the --partial option tells rsync to keep the partial file  which  should 
  
      make a subsequent transfer of the rest of the file much faster. 
  

--partial-dir=DIR 
  
      A better way to keep partial files than the --partial option is to specify a DIR that 
  
      will be used to hold the partial data (instead of writing it out to  the  destination 
  
      file).   On  the  next  transfer,  rsync will use a file found in this dir as data to 
  
      speed up the resumption of the transfer and then delete it after it  has  served  its 
  
      purpose.

默认的情况下,当rsync传输中断后,新的rsync传输将删除所有的未完成的残余文件片段,然后开始新的传输。而使用--partial后,将会进行我们所说的断点续传。
值得注意的是-P这个参数是综合了--partial --progress两个参数,所以rsync的断点续传可以用下面的例子来说明:

rsync  -avzP

另外,还有两个参数也经常用到:
  t:修改次数
  r:递归方式
我来通过实验给大家展示一下rsync命令的常用方法。
这里我们演示使用的操作系统是Linux,rsync已经预装好。如果是AIX操作系统,需要单独在IBM网站下载安装包安装。

演示场景:将secDB1服务器SRC目录下的内容同步传输到secDB2服务器DEST目录下,整个过程在secDB1服务器上来完成。

1.在第一台主机的根目录下创建一个名为“SRC”的目录,作为我们传输演示的源目录。
[root@secDB1 /]# mkdir /SRC

2.在SRC目录中创建两个文件f1和f2

[root@secDB1 /]# cd /SRC
[root@secDB1 SRC]# touch f1
[root@secDB1 SRC]# touch f2
[root@secDB1 SRC]# ls -ltr
total 0
-rw-r--r-- 1 root root 0 Feb 21 10:37 f1
-rw-r--r-- 1 root root 0 Feb 21 10:37 f2



3.在第二台主机的根目录下创建一个名为“DEST”的目录,作为我们传输演示的目标目录
[root@secDB2 /]# cd /
[root@secDB2 /]# mkdir /DEST

4.将secDB1服务器SRC目录下的内容同步传输到secDB2服务器DEST目录下

[root@secDB1 SRC]# rsync -avzP /SRC/ -e ssh root@172.17.193.211:/DEST
root@172.17.193.211's password:
building file list ... done
./
f1
f2

sent 162 bytes  received 70 bytes  42.18 bytes/sec
total size is 0  speedup is 0.00



5.验证第二台主机的DEST目录下是否有发送过来的文件

[root@secDB2 /]# cd /DEST
[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.修改DEST目录下的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.再次将SRC目录下的内容向DEST目录同步

[root@secDB1 SRC]# rsync -avzP /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同步到了DEST目录,这也是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 -avzP /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.

secooler
10.02.21

-- The End --