利用rsync+crontab实现Linux服务器间的定时增量备份

rsyncLinuxUNIX系统下的数据镜像备份工具,它的特性如下:

1、可以镜像保存整个目录树和文件系统。

2、可以很容易做到保持原来文件的权限、时间、软硬链接等等。

3、无须特殊权限即可安装。

4、优化的流程,文件传输效率高。

5、可以使用rcpssh等方式来传输文件,当然也可以通过直接的socket连接。 

6、支持匿名传输。

今天就利用rsync+crontab来实现Linux服务器间的定时增量备份。

环境说明:

工作服务器AIP地址 192.168.1.86,操作系统 CentOS 5.5,已建立用户 tom

备份服务器BIP地址 192.168.1.87,操作系统 CentOS 5.5,已建立用户 jack(uid 503, gid 503)

实现目的:

每天早上3点,将A服务器上的用户目录/home,自动备份到B服务器的/home/jack/backup-A下,备份增量进行,不需要任何用户交互。

配置步骤:

1、配置备份服务器B

1)[root@Server-B ~]# rpm -qa| grep rsync   #查看是否有rsync

 rsync-2.6.8-3.1

以上输出说明rsync已经装好了,保证/etc/services有下面的行

2)rsyncrpm包本身没有附带rsyncd的配置文件,需要手动创建它(/etc/rsyncd.conf

[root@Server-B ~]# vi /etc/rsyncd.conf

3)修改/etc/xinetd.d/rsync,打开rsync服务

[root@Server-B ~]# vi /etc/xinetd.d/rsync

4)开启rsyncd服务,并设置系统启动时,加载rsync服务

[root@Server-B ~]# /usr/bin/rsync –daemon

5)检验rsync服务是否启动成功

有如下内容表示已经成功启动

6)配置ssh的非交互式登录

思路:服务器A生成一对RSA密钥,自己保留私钥,将私钥附加到登录服务器Bauthorized_keys中,A登录B,以及进行ABrsync就不用交互式输入密码了。

>>在服务器A上生成一对密钥(以root的身份执行)

>>远程登录到备份服务器B上并且创建.ssh目录。

[root@Server-A ~]# ssh [email protected]

 

[jack@Server-B ~]$ mkdir .ssh;chmod 0700 .ssh

>>A机上执行远程拷贝公钥到B机:

[root@Server-A ~]# scp .ssh/id-rsa.pub [email protected]: /home/jack/.ssh/authorized_keys
这样,无交互的ssh登录就完成了。特别注意的是B服务器的.ssh目录权限,最好是700,如果赋予它过多的权限,无交互登录可能不生效!

7)编制备份脚本

在服务器A上编写一个备份脚本,放置在/home/tom/public_scripts下,名为backup.sh

#!/bin/sh

TARGET_DIR=backup-A

for SOURCE_DIR in /home

do

echo Backing up $SOURCE_DIR …”

rsync -au --delete $SOURCE_DIR

[email protected]:/home/jack/$TARGET_DIR

done

[root@Server-A public_scripts]# chmod 755 backup.sh

该脚本权限设置为755,以便其他用户可访问到。

8)修改计划任务

在服务器A上,用root身份执行以下命令

[root@Server-A ~]# crontab –e

 3 * * * * /home/tom/public_scripts/backup.sh


Tips:

需要特别指出的是,同步数据需要弄明白,到底是需要从A服务器同步到B服务器,还是在B服务器上通过指令来向A服务器发起请求进行同步,

在测试过程中发现,

1.@ERROR:no path setting 

rsync error:error starting client-server protocol(code 5) at main.c(1503) [receiver=3.0.6]这个问题网上是真的找不到答案,最后我就怀疑是不是 因为我的同步机制有问题(B向A服务器发起同步请求), 于是换了一种方式就可以了

2.在rsyncd.conf中配置的日志没有起作用,只有在启动命令时,后面添加--log-file='/xxx/xxxxx/yy.log' 才会有日志输出







猜你喜欢

转载自blog.csdn.net/u012972294/article/details/80594713