日前,一不小心把生产线上的数据库服务器数据给清空了,额,囧。那个过程就不说了,总之,老革命被老问题打倒。

然后开始做数据的冗余备份,先在数据库服务器上做好计划任务,每天凌晨做备份,除了本地放一份备份文件之外,还要放一份在本地的Window PC上。

那么两台电脑之间该如何交换数据呢?FTP神马的已经弱爆了,明文传送密码是一直被大家诟病的。这次我们选择个安全点,时尚点的。

先看了scp。scp的语法很简单

从linux系统复制文件到windows系统:scp /oracle/a.txt administrator@192.168.3.181:/d:/

如果是scp目录,也可以进行

scp -r local_folder remote_username@remote_ip:remote_folder

但scp有几个不好的地方,一是拷贝目录的时候,每次都要将里面的东西全部拷贝一遍,不管是否已有同名文件,这个白白增加拷贝的量。第二,命令执行的时候必须输入密码,无法用管道符将保存密码的文件输入到命令中,已经搜到的结果是都必须在scp两端建密钥。我比较懒,不想做。第三,Window上必须安装Win版的SSH服务器,否则命令执行不了。

那么换个方法吧,于是看上了rsyncd。

rsyncd最大的优势就是如果拷贝目录的时候有同名文件,可以设置跳过不拷贝,只拷贝和上一次拷贝后多出来的文件,这个大大节省了拷贝的数据量。而且支持将密码保存在文件中,可以作为命令行的参数被调用,这样就可以自动执行了。

看了一下,Windows底下又不支持rsyncd,在网上搜的时候,看到的文章都是大而全,需要下载cwRsync_Server_2.0.10_Installer.zip(服务器端)和cwRsync_2.0.10_Installer.zip(客户端)两个文件。但根据我的需要,在我尝试之后,发现如果只是需要将Linux服务器端的数据同步到Windows本地PC,根本无需安装服务器端(即cwRsync_Server_2.0.10_Installer.zip)。只要安装客户端即可。

这里要提醒大家的是,Windows本地PC的密码文件有以下几点要注意:

1、权限。Linux下的密码文件会要求你chmod 600 pass_file(pass_file替换成你自己的实际文件名)。Windows下底下怎么chmod呢?那就右键点击文件,在共享和安全的选项中,将除了你当前运行的用户之外的所有用户删掉,并给当前运行的用户只指定读取和写入两个权限即可。

2、格式。Linux服务器端也有一个密码文件,它的格式是用户名:密码,但客户端文件的密码文件不是,它的格式是只包含密码的,不用再写用户名,否则会报权限认证的错误。如果服务器端的密码文件包含多组用户名密码,客户端也应该一一对应(这一点我还没有确认过)。

rsync -vzrto --progress --password-file=pass_file rsync://xxx@192.168.yyy.zzz/name .

name必须和Linux服务器端rsyncd.conf中的区段名对应。

rsync不是系统级命令,如果想不加路径,就必须在系统的path变量中,将它的路径加入,否则会报找不到命令的错误。

这样就能顺利执行了,然后可以将这个写成bat文件,用计划任务来执行。这些就很简单了,就不说了。

作者 龙飞