CentOS之间rsync做文件增量(备份)同步(主动拉取)

服务器

  • 10.200.90.66:备份服务器
  • 10.200.92.12:远程服务器

目的

将远程服务器数据同步到备份服务器

前提

两台服务器安装rsync(服务端、备份端)

yum install -y rsync
#启动rsync服务
systemctl start rsyncd.service
systemctl enable rsyncd.service
systemctl restart rsyncd.service

#检查是否已经成功启动
netstat -lnp|grep 873
#远程服务器(配置文件)(/etc/rsyncd.conf)
# /etc/rsyncd: configuration file for rsync daemon mode

# See rsyncd.conf man page for more options.

# configuration example:

# uid = nobody
# gid = nobody
# use chroot = yes
# max connections = 4
# pid file = /var/run/rsyncd.pid
# exclude = lost+found/
# transfer logging = yes
# timeout = 900
# ignore nonreadable = yes
# dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2

# [ftp]
#        path = /home/ftp
#        comment = ftp export area

uid = root                              
# //设置运行rsync 进程的用户
gid = root
use chroot = no
max connections = 4
# pid file = /var/run/rsyncd.pid        
#//CentOS7中yum安装不需指定pid file 否则报错
lock file=/var/run/rsyncd.lock
log file = /var/log/rsyncd.log     
# //此文件定义完成后系统会自动创建
exclude = lost+found/
transfer logging = yes
timeout = 900
ignore nonreadable = yes         
# //同步时跳过没有权限的目录
dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2          
#  //传输时不压缩的文件


#同步规则名称
[nextcloud]          
#同步的路径
path=/data/syncDir
#规则描述
comment=测试规则
ignore errors
#是否可以pull
read only=no    
#是否可以push
write only=no      
list=no
#下面配置同步时候的身份,注意该身份是在rsync里面定义的,并非是本机实际用户。
#客户端获取文件的身份此用户并不是本机中确实存在的用户
auth users=rsyncuser    
#//用来认证客户端的秘钥文件 格式 USERNAME:PASSWD 此文件权     
#//限一定需要改为600,且属主必须与运行rsync的用户一致。  
secrets file=/etc/rsyncd.passwd                                                             
#允许所有主机访问(可设置成备份服务器)
hosts allow=*    

密码文件(远程服务器端)

#/etc/rsyncd.passwd  
rsyncuser:123456

执行命令进行文件同步(备份服务器)

#rsync -vzrtopg --delete --progress --password-file=/etc/rsyncd.passwd [email protected]::nextcloud /data/backupDir 1> /home/logs/rsync.log 2>&1
#-–exclude-from=exclude.list
#exclude.list

rsync -vzrtopg \
--delete \
--exclude="2.txt" \
--progress \
--password-file=/etc/rsyncd.passwd \
[email protected]::nextcloud \
/data/backupDir \
1> /home/logs/rsync.log 2>&1

采用crond定时同步

# 在备份服务器服务器上,定时同步
0 2 * * * root /home/backup/script/auto_rsync.sh
# 在远程服务器上,定时备份数据库
0 2 * * * root /root/backup/script/auto_mysqldump.sh

同步脚本

备份数据库脚本auto_mysqldump.sh

#!/bin/bash
DATE="$(date +%F)"
backup_dir=/root/backup/database
mysqldump -uroot -pAsdf@123 pms > ${backup_dir}/pms-${DATE}.sql
​
​
# 只保留前100个
lPkgList=($(ls "${backup_dir}" | sort -nr))
for ((j=100; j<${#lPkgList[@]}; ++j)); do
        rm -rf "${backup_dir}/${lPkgList[$j]}"
done

备份文件脚本auto_rsync.sh

#!/bin/bash
rsync -vzrtopg --delete --progress --password-file=/etc/rsyncd.passwd [email protected]::nextcloud /data/backupDir 1> /home/logs/rsync.log 2>&1

命令详细使用方法

http://man.linuxde.net/rsync

#常用命令
z是“–compress”压缩模式
r是“–recursive”以子目录递归模式
t是“–times“用来保持文件信息时间
o是”–owner“用来保持文件的属主信息
p是”–perms“用来保持文件权限
g是”–group“用来保持文件的属组
–progress:用来显示数据镜像同步的过程
–delete:指定以rsync服务器为基准进行数据镜像同步,也就是要保持rsync服务器端目录与客户端目录的完全一致
–exclude:用于排除不需要文件传输的类型
/date/10.0.2.15/nextcloud:用户指定备份文件在客户端机器上的存放路径
-----------------------------------
-v, --verbose 详细模式输出。
-q, --quiet 精简输出模式。
-c, --checksum 打开校验开关,强制对文件传输进行校验。
-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD。
-r, --recursive 对子目录以递归模式处理。
-R, --relative 使用相对路径信息。
-b, --backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为~filename。可以使用--suffix选项来指定不同的备份文件前缀。
--backup-dir 将备份文件(如~filename)存放在在目录下。
-suffix=SUFFIX 定义备份文件前缀。
-u, --update 仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文件,不覆盖更新的文件。
-l, --links 保留软链结。
-L, --copy-links 想对待常规文件一样处理软链结。
--copy-unsafe-links 仅仅拷贝指向SRC路径目录树以外的链结。
--safe-links 忽略指向SRC路径目录树以外的链结。
-H, --hard-links 保留硬链结。
-p, --perms 保持文件权限。
-o, --owner 保持文件属主信息。
-g, --group 保持文件属组信息。
-D, --devices 保持设备文件信息。
-t, --times 保持文件时间信息。
-S, --sparse 对稀疏文件进行特殊处理以节省DST的空间。
-n, --dry-run现实哪些文件将被传输。
-w, --whole-file 拷贝文件,不进行增量检测。
-x, --one-file-system 不要跨越文件系统边界。
-B, --block-size=SIZE 检验算法使用的块尺寸,默认是700字节。
-e, --rsh=command 指定使用rsh、ssh方式进行数据同步。
--rsync-path=PATH 指定远程服务器上的rsync命令所在路径信息。
-C, --cvs-exclude 使用和CVS一样的方法自动忽略文件,用来排除那些不希望传输的文件。
--existing 仅仅更新那些已经存在于DST的文件,而不备份那些新创建的文件。
--delete 删除那些DST中SRC没有的文件。
--delete-excluded 同样删除接收端那些被该选项指定排除的文件。
--delete-after 传输结束以后再删除。
--ignore-errors 及时出现IO错误也进行删除。
--max-delete=NUM 最多删除NUM个文件。
--partial 保留那些因故没有完全传输的文件,以是加快随后的再次传输。
--force 强制删除目录,即使不为空。
--numeric-ids 不将数字的用户和组id匹配为用户名和组名。
--timeout=time ip超时时间,单位为秒。
-I, --ignore-times 不跳过那些有同样的时间和长度的文件。
--size-only 当决定是否要备份文件时,仅仅察看文件大小而不考虑文件时间。
--modify-window=NUM 决定文件是否时间相同时使用的时间戳窗口,默认为0。
-T --temp-dir=DIR 在DIR中创建临时文件。
--compare-dest=DIR 同样比较DIR中的文件来决定是否需要备份。
-P 等同于 --partial。
--progress 显示备份过程。
-z, --compress 对备份的文件在传输时进行压缩处理。
--exclude=PATTERN 指定排除不需要传输的文件模式。
--include=PATTERN 指定不排除而需要传输的文件模式。
--exclude-from=FILE 排除FILE中指定模式的文件。
--include-from=FILE 不排除FILE指定模式匹配的文件。
--version 打印版本信息。
--address 绑定到特定的地址。
--config=FILE 指定其他的配置文件,不使用默认的rsyncd.conf文件。
--port=PORT 指定其他的rsync服务端口。
--blocking-io 对远程shell使用阻塞IO。
-stats 给出某些文件的传输状态。
--progress 在传输时现实传输过程。
--log-format=formAT 指定日志文件格式。
--password-file=FILE 从FILE中得到密码。
--bwlimit=KBPS 限制I/O带宽,KBytes per second。
-h, --help 显示帮助信息。

排除文件

rsync命令同步文件,exclude排除多个匹配模式_未完城的博客-CSDN博客_rsync 模糊匹配

遇到的问题

[root@ tmp]# rsync -azv --delete 192.168.xx.206::xx-db ./test
receiving file list ... rsync: opendir "." (in yapi-db) failed: Permission denied (13)
done
IO error encountered -- skipping file deletion

sent 16 bytes  received 127 bytes  286.00 bytes/sec
total size is 0  speedup is 0.00
rsync error: some files could not be transferred (code 23) at main.c(1298) [generator=2.6.8]

原因:未关闭selinux

解决办法:

# 临时更改
[root@localhost backup]setenforce 0
[root@localhost backup]getenforce 
Permissive
# 永久更改在 /etc/selinux/config 文件中修改为如下:SELINUX=disabled

你可能感兴趣的:(centos,服务器,linux)