Linux远程自动备份、同步数据(rsync)
一、安装数据备份工具rsync二、rsync命令和参数说明三、使用ssh方式设置免密远程登录和备份四、以后台服务的方式实现远程备份五、使用计划任务定时自动同步远程数据
一、安装数据备份工具rsync
- rsync不仅可以远程同步数据(类似于scp),还可以本地同步数据(类似于cp),但不同于cp或scp的一点是,rsync不像cp/scp一样会覆盖以前的数据(如果数据已经存在),它会先判断已经存在的数据和新数据有什么不同,只有不同时才会把不同的部分覆盖掉。
1、查询是否安装rsync,如果未安装,则运行命令安装rsync服务。
rpm -qa |grep rsync
yum remove -y rsync
yum install -y rsync
2、编辑/etc/selinux/config,关闭selinux。
vi /etc/selinux/config
SELINUX=disabled
getenforce
3、查看iptables相关规则,设置iptables,插入一条规则,保存至/etc/sysconfig/iptables文件,重启iptables防火墙。
iptables -L
iptables -I INPUT -p tcp --dport 873 -j ACCEPT
service iptables save
service iptables restart
4、安装超级守护进程xinetd,设置开机启动。
yum install xinetd -y
5、编辑/etc/xinetd.d/rsync文件将"disable = yes" 修改为 “disable = no”,使rsync服务随xinetd启动而启动。
vi /etc/xinetd.d/rsync
或
sed -i 's#yes#no#g' /etc/xinetd.d/rsync
6、启动xinetd服务。
service xinetd start
7、查看rsync服务是否启动,启动成功可监听到873端口。
netstat -lnp |grep 873
二、rsync命令和参数说明
rsync的命令格式 | 说明 |
---|---|
rsync [OPTION] SRC DEST | 本地目录同步,不加’[user@]host’ 默认指的是root 。 |
rsync [OPTION] SRC [USER@]HOST:DEST | 从本地目录同步数据到远程目录。(以ssh方式登录远程主机,可用密码也可用密钥)。 |
rsync [OPTION] [USER@]HOST:SRC DEST | 从远程目录同步数据到本地目录。(以ssh方式登录远程主机,可用密码也可用密钥)。 |
rsync [OPTION] [USER@]HOST::SRC DEST | 从远程目录同步数据到本地目录,’::'表示验证方式不同(通过rsync daemon方式登录)。 |
rsync [OPTION] SRC [USER@]HOST::DEST | 从本地目录同步数据到远程目录,’::'表示验证方式不同(通过rsync daemon方式登录)。 |
rsync常用选项 | 说明 |
---|---|
-a | 归档模式,表示以递归方式传输文件,并保持所有属性,等同于-rlptgoD ,-a选项后面可以跟一个 --no-OPTION, 这个表示关闭-rlptgoD中的某一个例如 -a --no-l 等同于-rptgoD。 |
-r | 对子目录以递归模式处理,主要是针对目录来说的,如果单独传一个文件不需要加-r,但是传输的是目录必须加-r选项。 |
-v | 打印一些信息出来,比如速率,文件数量等。 |
-l | 保留软链结。 |
-L | 向对待常规文件一样处理软链结,如果是SRC中有软连接文件,则加上该选项后将会把软连接指向的目标文件拷贝到DEST。 |
-p | 保持文件权限。 |
-o | 保持文件属主信息。 |
-g | 保持文件属组信息。 |
-D | 保持设备文件信息。 |
-t | 保持文件时间信息。 |
–delete | 删除DST中SRC没有的文件。 |
–exclude=PATTERN | 指定排除不需要传输的文件,等号后面跟文件名,可以是万用字符模式(如*.txt)。 |
–progress | 同步的过程中显示同步过程的状态,如统计同步的文件数量、同步文件传输的速度。 |
-u | 把DST中比SRC还新的文件排除掉,不会覆盖。 |
常用命令示例 | 说明 |
---|---|
rsync -a dict1/ dict2/ | 将dict1目录内容复制到dict2目录,目录名后面一定要加斜杠,’-a’选项等同于’-rlptgoD’。 |
rsync -av --no-l dict1/ dict2/ | 将dict1目录内容复制到dict2目录,不复制软连接文件,’-l’表示只复制软连接文件,但软连接文件指向的目标文件却不会复制。 |
rsync -avL dict1/ dict2/ | 将dict1目录内容复制到dict2目录,复制SRC中软连接文件所指向的目标文件到DEST目录。 |
rsync -av --delete dict1/ dict2/ | 将dict1目录内容复制到dict2目录,并将DEST中有而SRC中没有的文件删除。 |
rsync -av --exclude="*.txt" dict1/ dict2/ | 将dict1目录内容(除了"*.txt"文件)复制到dict2目录。 |
rsync -avL dict1/ root@192.168.1.80:/root/dict2/ | 将dict1目录内容复制到以root账号登陆的192.168.1.80远程主机的/root/dict2/目录。 |
rsync -avL root@192.168.1.80:/root/VMwareTools.tar.gz Users/xue/Desktop/ | 以root账号登陆的192.168.1.80远程主机并把/root/目录下的VMwareTools.tar.gz文件复制到本地桌面。 |
三、使用ssh方式设置免密远程登录和备份
- A计算机同B计算机免密登录备份设置思路:A计算机root用户登陆,使用命令’ssh-keygen -t rsa '生成密钥对,则将A计算机的公钥放入B计算机的authorized_keys文件中,A计算机以后就可以免密登录备份B计算机。B计算机免密登录备份A计算机具体思路同上。
1、A计算机root用户登陆生成密钥对(用rsa加密算法生成密钥对,也可用dsa加密算法)。
ssh-keygen -t rsa
2、一路回车(不设置密钥对存放路径和私钥密码,默认即可)。
3、查看A计算机生成密钥对。
cd /root/.ssh
ls
4、将A计算机公钥追加到文件authorized_keys里,更改文件权限。
cat id_rsa.pub >> authorized_keys
chmod 600 authorized_keys
5、将A计算机文件authorized_keys复制到远程主机B计算机/root/.ssh目录里。
scp authorized_keys root@192.168.1.80:/root/.ssh
或
rsync -avL authorized_keys root@192.168.1.80:/root/.ssh
6、A计算机再次登陆B计算机,无需输密码即可远程进入系统,备份文件也无需输入密码。
ssh root@192.168.1.80
rsync -avL test@192.168.1.120::test/ /tmp/test
四、以后台服务的方式实现远程备份
-
设置思路:A计算机设置为远程rsync服务器,B计算机作为客户端连接A远程rsync服务器。
-
设置远程服务器,启动rsync服务(IP:192.168.1.120)
1、编辑/etc/rsyncd.conf配置文件如下图,设置远程rsync服务器,创建备份数据文件夹/root/test,创建测试数据 /root/test/1.txt。
vi /etc/rsyncd.conf
mkdir /root/test
touch /root/test/1.txt
echo "rsync server test " > /root/test/1.txt
cat /root/test/1.txt
2、上图的 port,log file,pid file,address都属于全局配置。[]内的test是模块名,属于模块配置。一个配置文件可以有多个不同模块。
配置参数 | 说明 |
---|---|
port | 指定哪个端口启动rsync服务,默认为873。 |
log file | 指定日志文件,rsyncd服务启动后系统创建。 |
pid file | 指定pid文件,rsyncd服务启动后系统创建。这个服务的作用涉及服务的启动停止等进程操作。 |
address | 指定启动rsync服务的IP,假如你的主机有多个ip,不指定ip的话就默认在全部ip上启动。 |
[ ] | 指定模块名。 |
path | 指定远程rsync服务器传送数据存放的路径。 |
use chroot=true | 默认值是true,但是如果你的文件中有软链接,建设设置为false。设置为true的优点是提高了安全性,但是缺点是需要root权限,并且不能备份指向外部的软链接 |
max connections=4 | 指定最大的连接数,默认是0即无限制。这里的连接数指的是允许多少台主机同时连接服务器。 |
read only=false | 如果为true,则不能上传的该模块指定的路径下。 |
list=false | 表示当用户查询该服务器上的可用模块时,模块是否被列出。设定为true则列出,会有一定的危险性,所以设为false则隐藏,更安全。 |
uid gid | 指定在传输时以哪个用户和用户组的身份传输。 |
auth users | 指定传输时需要使用的用户名。 |
secrets file | 指定密码文件,该参数连同上面的auth users如果不指定,则不使用密码验证。该文件的权限一定要是600。 |
host allow | 表示被允许连接该模块的主机,可以是ip或者网段,如果是多个,中间用空格隔开。 |
3、配置secrets file参数项,编辑/etc/rsyncd.passwd文件,输入内容test:test123,保存后设置权限为600。
vi /etc/rsyncd.passwd
chmod 600 /etc/rsyncd.passwd
4、启动rsyncd服务。
service xinetd start
或
rsync --daemon --config=/etc/rsyncd.conf
5、查看服务是否启动,启动成功可监听到873端口。
netstat -lnp |grep 873
- rsync客户端测试一密码验证通过后备份数据
1、运行如下命令,输入密码"test123",备份远程服务器数据,测试过程如下。
rsync -avL test@192.168.1.120::test/ /tmp/test
- rsync客户端测试二无需输入密码即可备份数据
无需输入密码备份方法一
1、rsync客户端编辑一个密码文件/etc/passsecret,加入test密码“test23”,保存文件修改权限600。
vi /etc/passsecret
chmod 600 /etc/passsecret
2、输入如下命令即可备份数据,备份过程如下图。
rsync -avL test@192.168.1.120::test/ /tmp/test/ --password-file=/etc/passsecret
无需输入密码备份方法二
1、在rsync服务端,注释配置文件中auth users和secrets file这两项参数即可,配置立即生效,无需重启rsync服务,此时默认以root账户身份备份。
vi /etc/rsyncd.conf
2、输入如下命令即可备份数据,备份过程如下图。
rsync -avL 192.168.1.120::test/ /tmp/test/
五、使用计划任务定时自动同步远程数据
1、如果需要客户端上的数据与服务器端完全一致,加入 “–delete” 选项即可。
rsync -avL --delete test@192.168.1.120::test/ /tmp/test/ --password-file=/etc/passsecret
2、客户端创建备份数据命令脚本文件,添加内容如下图。
vi /root/update-bak.sh
#!/bin/bash
#bakup
rsync -avL --delete test@192.168.1.120::test/ /tmp/test/ --password-file=/etc/passsecret
3、安装crond服务。
yum install -y crontabs
4、启动crond服务。
service crond start
5、查看crond服务状态。
service crond status
6、通过设定crontab,加入内容"*/1 * * * * /root/update-bak.sh",让 /root/update-bak.sh这个脚本每 1 分钟运行一次。
crontab -e
*/1 * * * * /root/update-bak.sh
7、配置完成后,重启crond 服务。
service crond restart
8、远程自动同步测试步骤如下图。
更多推荐
所有评论(0)