熟知:rsync参数
rsync命令 1v4
a.本地备份数据cp
b.远程备份scp
scp -rp /tmp root@172.16.1.41:/backup r递归,p保持原有属性
rsync -rp /tmp root@172.16.1.41:/backup 备份目录以及文件
rsync -rp /tmp/ root@172.16.1.41:/backup 只备份目录下的所有文件 推送
rsync -rp root@172.16.1.41:/backup /tmp 拉取数据
c.替代删除命令
rsync -rp --delete /tmp root@172.16.1.41:/backup 实现无差别同步数据
快速删除大文件目录下文件可以用比 rm快
d.替代查看文件命令 ls
rsync /etc/hosts
客户端推送是备份,拉取是恢复,服务端正好相反
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
SRC:要推送的备份数据信息
USER@:指定认证用户信息
HOST:指定远程主机ip或主机名称
::DEST :备份服务器的模块信息
rsync -avz /etc/hosts rsync_backup@172.16.1.100::ftp
rsync 命令参数 详细说明 man rsync
-v, --verbose 显示详细的传输信息
-a, --archive 命令归档参数rtopgDl
-z, --compress 传输过程中压缩数据
-r, --recursive 递归参数
-t, --times 保持文件的属性信息时间不变(修改时间)
-o, --owner 保持文件属主信息不变
-g, --group 保持文件属组信息不变
ps:如何让-o和-g参数生效,需要把uid和gid修改成root,需要将fake super=no或注释
-p, --perms 保持文件权限不变
-D 保持设备文件信息不变
-l ,--links 保持链接文件属性不变
-L, 保持链接文件数据信息不变
-P 显示文件传输进度信息
--exclude=PATTERN 排除指定数据不被传输
--exclude-from=FILE 排除指定数据不被传输(批量排除)
--bwlimit=RATE 显示传输速率 100M/8=12.5M
--delete 无差异同步参数,我有的你也有,我没有的你也不能有(慎用)
部署rsync服务
第一步安装rsync
yun install -y rsync
第二步配置server端配置文件
man rsyncd.conf 查看配置文件官方文档说明
vim /etc/rsyncd.conf
uid = rsync 指定管理备份目录的用户
gid = rsync 用户组
port = 873 定义rsync服务端口号
fake super = yes 伪装成超级管理员
use chroot = no 和安全相关的配置
max connections = 4 最大连接数,同时在线数
timeout = 900 超时时间(秒)
pid file = /var/run/rsyncd.pid 记录进程号信息,1.快速结束进程 2.判断进程是否运行
log file = /var/log/rsyncd.log 日志文件
lock file = /var/run/rsyncd.lock 锁文件
ignore errors 忽略传输中简单的小错误
read only = false 指定目录可读可写
list =false (true)查看可以用的模块rsync root@172.16.1.41::
hosts allow = 172.16.1.0/24 允许传输的主机(白名单)
hosts deny = 0.0.0.0/32 黑名单
auth users = rsync_backup 指定认证用户
secrets file = /etc/rsync.passwd 指定认证用户密码文件
[ftp] 模块信息
path = /home/ftp 指定备份目录
comment = ftp export area 说明信息
第三步
创建虚拟用户
useradd rsync -M -s /sbin/nologin
创建备目录并修改属主组信息
mkdir /backup
chown rsync.rsync /backup
创建用户证密码文件
echo "rsync_backup:123456" >/etc/rsync.passwd
chmod 600 /etc/rsync.passwd
或者生成密文密码
htpasswd -bc /etc/rsync.passwd rsync_backup 123456
chmod 600 /etc/rsync.passwd
重启服务 systemclt restart rsyncd
第四步
客户端创建一个密码文件
当server生成密文的密码时,client需要和server的密文一致
echo "123456" >/etc/rsync.password
chmod 600 /etc/rsync.password
免交互备份 测试
rsync -avz /etc/hosts rsync_backup@172.16.1.41::ftp --password-file=/etc/rsync.passwd
补充说明:
排除相对路径
rsync -avz /oldboy --exclude=b/1.txt --exclude=c/ rsync_backup@172.16.1.41::ftp --password-file=/etc/rsync.passwd 排除目录oldboy下b目录下的1.txt和c目录
绝对路径
rsync -avz /oldboy --exclude=/oldboyb/1.txt --exclude=/oldboyc/ rsync_backup@172.16.1.41::ftp --password-file=/etc/rsync.passwd 排除目录oldboy下b目录下的1.txt和c目录
批量排除exclude.txt文件内是所要排除的文件
rsync -avz /oldboy --exclude-from=/oldboyb/exclude.txt rsync_backup@172.16.1.41::ftp --password-file=/etc/rsync.passwd 排除目录oldboy下b目录下的1.txt和c目录
守护进程创建备份目录
rsync -avz /etc/hosts rsync_backup@172.16.1.41::ftp/nfs01/ --password-file=/etc/rsync.passwd
tar -zchf /backup/system_backup_$(date +%F_week%w).tar.gz ./etc/hosts 相对路径压缩-h把链接所指向的源文件压缩保存
find /backup -type f -mtime +7 |xargs rm 查找七天前的文件并删除
date +%F_week%w 日期和周
find /backup -type f -mtime +180 ! -name "*week1.tar.gz" 保留周一的信息,!取反 (mtime +是之前的 -是之内的,具体数字是具体的天数)
man touch 可以修改文件时间
常用 touch -mt 202103040506 test.txt
stat test.txt 可以查看文件的详细
两种方法,在客户端创建标识备份目录,或者直接在服务端创建备份目录
rsync -avz /backup rsync_backup@172.16.1.41::ftp/nfs01/ --password-file=/etc/rsync.passwd
rsync -avz /backup/nfs01 rsync_backup@172.16.1.41::ftp --password-file=/etc/rsync.passwd
验证数据的完整性
md5sum /etc/hosts 生成算法 f902920a028584bd72ed37668305c3ce /etc/hosts
find /backup -type f -mtime +7 |xargs md5sum>>/backup/finger.txt 生成指纹文件finger.txt
find /backup/ -type f -mtime -1 ! -name "finger*"|xargs md5sum >/backup/10.0.0.31/finger.txt
如何验证数据完整性原理
利用md5算法进行验证数据完整性
md5sum -c 指纹文件命令执行原理
第一个历程: 打开一个指纹文件,将信息记录到缓存中
第二个历程: 根据指纹文件的路径信息,生成md5数值信息
第三个历程: 将新生成md5数值和原有指纹文件中的数值进行比较
第四个历程: 如果相同显示结果为ok,如果不同显示failed
把校验的结果重定向到/tmp/check.txt
find /backup/ -type f -name "finger.txt"|xargs md5sum -c &>/tmp/check.txt
03. 如何实现发送邮件
a 配置163企业邮箱
b 编写linux服务邮件相关配置文件
vim /etc/mail.rc
set from=邮箱地址 smtp=smtp.163.com
set smtp-auth-user=邮箱地址 smtp-auth-password=授权码 smtp-auth=login
systemctl restart postfix.service
c 发送邮件测试
echo "邮件发送测试"|mail -s "邮件测试" xxxxxxxxx@qq.com
mail -s "邮件测试"xxxxxxxxx@qq.com </tmp/check.txt
编写全网备份脚本
客户端脚本:
nfs01服务器备份脚本:
#/bin/bash
backup_dir="/backup"
IP_info=$(hostname -i)
#crete backup dir
mkdri /$backup_dir/$IP_info
#tar back data
cd /
tar -zchf ./$backup_dir/$IP_info/system_backup_$(date +%F_week%w).tar.gz ./etc/hosts
#del 7 day ago data
find /$backup_dir -type f -mtime +7 |xargs rm
#create finger file
find /$backup_dir/ -type f -mtime -1 ! -name "finger*"|xargs md5sum >/$backup_dir/$IP_info/finger.txt
#backup push data info
rsync -az /$backup_dir/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.passwd
web01服务器备份脚本:
省略
服务端脚本:
测试检验脚本方法: sh -x 脚本信息
自动完成数据备份(定时任务)
客户端备份
crontab -e
0 0 * * * /bin/sh /server/scripts/backup.sh &>/dev/null
服务端备份
0 5 * * * /bin/sh /server/scripts/backup_server.sh &>/dev/null