Rsync是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份的优秀工具
拷贝cp
rsync /etc/hosts /tmp/host_rsync
查看ls
rsync /etc
远程备份数据scp
scp -rp /etc/hosts [email protected]:/backup
rsync -rp /etc/hosts 172.16.1.41:/backup/hosts_rsync
替代rm删除命令
rsync -rp --delete /null/ 172.16.1.41:/backup
--delete 实现无差异同步数据
1.查询是否安装rsync
rpm -qa | grep rsync
2.contos7默认安装了rsync.
yum install rsync
3.编写配置文件
vim /etc/rsyncd.conf
uid = rsync --- 指定管理备份目录的用户
gid = rsync --- 指定管理备份目录的用户组
port = 873 --- 定义rsync备份服务的网络端口号
fake super = yes --- 将rsync虚拟用户伪装成为一个超级管理员用户
use chroot = no --- 和安全相关的配置
max connections = 200 --- 最大连接数 同时只能有200个客户端连接到备份服务器
timeout = 300 --- 超时时间(单位秒)
pid file = /var/run/rsyncd.pid --- 记录进程号码信息 1.让程序快速停止进程 2. 判断一个服务是否正在运行
lock file = /var/run/rsync.lock --- 锁文件
log file = /var/log/rsyncd.log --- rsync服务的日志文件 用于排错分析问题
ignore errors --- 忽略传输中的简单错误
read only = false --- 指定备份目录是可读可写
list = false --- 使客户端可以查看服务端的模块信息
hosts allow = 172.16.1.0/24 --- 允许传输备份数据的主机(白名单)
hosts deny = 0.0.0.0/32 --- 禁止传输备份数据的主机(黑名单)
auth users = rsync_backup --- 指定认证用户
secrets file = /etc/rsyncd.password --- 指定认证用户密码文件 用户名称:密码信息
[backup] --- 模块信息
comment = "backup dir by **" 备注信息
path = /backup --- 模块中配置参数 指定备份目
4.创建rsync服务的虚拟用户(用于上传或下载文件的虚拟用户)
useradd rsync -M -s /sbin/nologin --创建rsync用户,-M不创建家目录,-s傀儡用户
5.创建备份目录
mkdir /backup 创建备份目录
chwon rsync.rsync /backup 改变目录属主
6.创建备份服务认证密码文件
echo "rsync_backup:123456" >/etc/rsyncd.password 创建认证密码文件
chmod 600 /etc/rsncd.password 修改文件的rxw属性
7.启动备份服务
systemctl start rsyncd 启动服务
systemctl enble rsyncd 将服务加入为开机自启动
systemctl status rsyncd 查看服务是否正常运行
rsync命令参数详细说明
-v --verbose 详细的传输信息
-a --archive (常用)归档文件,该参数保护了(rtopgDl)
-r --recursive 递归
-t --times 保持文件的时间不变(modifid时间)
-o --owner 保持文件的属主信息不变
-g --group 保持文件的属组信息不变
PS: 如何让-o和-g参数生效,需要将配置文件uid和gid改为root,
需要将 fake super参数进行注释
-p --perms 保持文件的权限信息不变
-D 保持设备文件的信息不变
-l --links 保持连接文件属性不变
-L 保持链接文件的信息不变
-P 显示数据传输的进度信息
--exclude=路径 排除指定数据不被传输
--exclude-from=file (批量)排除指定信息数据不被传输
--bwlimit=RATE 传输速率限制
--delete (慎用)无差异同步参数,我有的文件你也有,我没有的你也不能有。
rsync守护进程名称语法:
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
src: 要推送备份数据信息
[USER@]: 指定认证用户信息
HOST: 指定远程主机的IP地址或者主机名称
::DEST: 备份服务器的模块信息 rsync [OPTION…] SRC… rsync://[USER@]HOST[:PORT]/DEST
客户端使用push备份操作:
不设置password文件密码上传文件
rsync -avz /backup/ rsync_backup@backup::backup/lb02
/backup 本地要备份的数据文件夹,/backup后面带/与不带有区别。
备份目录后面有 / – /oldboy/ : 只将目录下面的内容进行备份传输
备份目录后面没有/ – /oldboy : 会将目录本身以及下面的内容进行传输备份。 rsync_backup 上传文件所使用的用户名,服务器上创建的。 backup 此处为服务器主机名称,此处也可以写入服务器的IP
backup/lb02 备份到服务器的路面。后跟lb02则会在backup下创建lb02的文件夹。
1.创建password密码文件
echo “123456” >/etc/rsyncd.password
chmod 600 /etc/rsncd.password 修改文件的rxw属性
2.编写sh脚本,用于自动备份
mkdir -p /server/scripts #创建脚本文件夹
vim /server/scripts/backup.sh
#binbash
#此脚本用于自动打包etc下的配置文件,每天上传到备份服务器。
tar -zcvf /backup/etc.$(date +%F-%T).backup.tgz /etc
#打包的时间加入时间%F为年月日%T为时分秒。
rsync -avz -delete /backup/ rsync_backup@backup::backup/lb02 --password-file=/etc/rsyncd.password
#上传到备份服务器
3.创建crontab定时计划任务
crontab -e #编辑
* * 1 * * /usr/bin/sh /server/scripts/backup.sh
4.恢复文件
rsync -avz rsync_backup@backup::backup/lb02/ /backup --password-file=/etc/rsyncd.password
1.排除单个文件
rsync -avz /backup --exclude=路径 --exclude=路径 [email protected]::backup --password-file=/etc/rsyncd.password
2.排除多个文件
vim /etc/exclude.txt
添加需要排除的文件名称
rsync -avz /backup --exclude-from=/etc/exclude.txt [email protected]::backup --password-file=/etc/rsyncd.password
rsync -avz --delete /backup/ [email protected]::backup/lb02 --password-file=/etc/rsyncd.password
需求:实现客户端自动备份,备份文件夹内删除7天后的文件,生成md5文件,上传到服务端对数据进行完整性校验,服务器端将备份的结果发送邮件。
1、服务器端脚本
vim /server/scripts/backup_server.sh
#bin/bash
#find exeed 180day and del (or) exclude wenk1
find /backup/ -type f -mtime +180 ! -name "*week1.tar.gz" | xargs rm &2>/dev/null
#complet checking
find /backup/ -type f -name "finger.txt" | xargs md5sum -c >/tmp/check.txt
#seed email
mail -s "数据备份" [email protected] </tmp/check.txt
2、服务器邮箱配置
开启163IMAP/SMTP服务
服务器邮箱配置文件
vim /etc/mail.rc
#163.com
set from=邮箱账号
smtp=smtp.163.com
set smtp-auth=user=邮箱账号
smtp-auth-password=邮箱密码
smtp-auth=login
#每天早上5点运行脚本将备份的数据的情况发送到邮箱
crontab -e
0 5 * * * /bin/sh /server/scripts/backup_server.sh &>/dev/null
3、客户端脚本
[root@lb01 /]# vim /server/scripts/backup.sh
#bin/bash
Backup_dir="/backup"
#tar /var/spool/cron/root /etc/rc.local /server/scripts /etc/sysconfig/iptables
tar zchf $Backup_dir/lb01/system_backup_$(date +%F_week%w).tar.gz ./var/spool/cron/root ./etc/rc.local ./server/scripts ./etc/sysconfig/iptables
#tar (web.server) /var/html/www
tar zchf $Backup_dir/lb01/www_backup_$(date +%F_week%w).tar.gz ./var/html/www
#del exceed 7day file
find $Backup_dir/ -type f -mtime +7 | xargs rm &>/dev/null
#create finger.txt
find $Backup_dir/ -type f -mtime -1 ! -name "finger*" | xargs md5sum >$Backup_dir/lb01/finger.txt
#create rsync.password
echo "123456" >/etc/rsync.password
chmod 600 /etc/rsync.password
#push backup.server
rsync -az $Backup_dir/ [email protected]::backup --password-file=/etc/rsync.passwor
创建定时计划任务每天晚上0点将数据打包备份到服务器端
crontab -e
#backup date (每天晚上零点备份数据)
0 0 * * * /bin/sh /server/scripts/backup.sh &>/dev/null