加载中...

rysnc实现linux与windows数据同步

一、前言

1.1目的

​ 1.1.1实现linux之间同步;

​ 1.1.2实现linux与windows之间同步;

​ 1.1.3了解windows定时任务。

1.2部署架构

rpm安装包下载地址:http://rpmfind.net/linux/rpm2html/search.php?query=rsync

Rsync在windows使用的是cwrsync

二、服务部署

2.1部署备份服务端

在192.168.100.101上操作

检查服务安装情况

soft]# rpm -qa|grep rsync
rsync-3.1.2-10.el7.x86_64

没有安装的使用yum安装,没有的话直接用rpm包进行部署

yum -y localinstall rsync-3.1.2-10.el7.x86_64.rpm

编辑配置文件

vim /etc/rsyncd.conf
#全局配置
uid = root
gid = root
use chroot = no
max connections = 4
strict modes = yes
port = 873
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
#局部配置,可配置多个,用于不同网段的客户端同步到不同的目录
[linux]
path = /bak/linux/
comment = linuxbak
auth users = linux_user
uid = root
gid = root
hosts allow = 192.168.100.0/24
secrets file = /etc/rsyncd.secrets
read only = no
list = n

[windows]
path = /bak/windows
comment = windowsbak
auth users = windows_user
uid = root
gid = root
hosts allow = 192.168.100.0/24
secrets file = /etc/rsyncd.secrets
read only = no
list = n

配置密码文件

vim /etc/rsyncd.secrets
linux_user:linux1234
windows_user:windows1234

设置600权限

chmod 600 /etc/rsyncd.secrets

创建存备份文件的目录

mkdir /bak/{linux,windows} -p 

启动服务并加入开机自启

systemctl start rsyncd && systemctl enable rsyncd

在/var/log/rsyncd.log可以查看同步情况的日志

2.2部署linux客户端

在192.168.100.110上操作

2.2.1安装rsync服务

# rpm -qa|grep rsync
rsync-3.1.2-10.el7.x86_64

配置密码文件

vim /etc/rsyncd.passwd
linux1234

创建需要备份的目录

mkdir /test1
echo “111” >> /test1/1.txt
echo "nnnn" >> /test1/nohup.out
echo "nnnn" >> /test1/nohup

2.2.2推送并添加计划任务

便捷推送脚本

vim /root/scripts/rsync.sh
rsync -avztopg --password-file=/etc/rsyncd.passwd --port 873 --exclude "nohup.out" --bwlimit=1024 /test1 linux_user@192.168.100.101::linux/192.168.100.110
chmod +x /root/scripts/rsync.sh

测试

bash /root/scripts/rsync.sh

去服务端查看(nohup.out被屏蔽了)

# ls /bak/linux/192.168.100.110/test1/
1.txt  nohup

加入计划任务没半小时执行一次

]# crontab -e
*/30 * * * * /root/scripts/rsync.sh

2.3部署windows服务端

2.3.1安装cwrsync

点击安装cwrsync服务,安装过程中需要设置服务端的用户名和密码,我们只用到推送功能,无须在意

安装在E盘下

在bin目录下新建密码文件(可能需要修改权限)

2.3.2添加推送脚本

在bin目录下新建w_rsync.bat脚本文件

注意:

不要用--password-file不然会一直提示password file must not be other-accessible需要手动输入密码才行 改用 "< "就行了,密码文件导入时需要用相对路径,绝对路径无法识别,且密码文件需要放在bin目录下

@echo off
e:
cd \ICW\bin
rsync -avztopg --exclude "nohup.out" --bwlimit=1024  /cygdrive/e/test2 windows_user@192.168.100.101::windows/192.168.100.1 <rsync.passwd

注意:改为rsync -avztopg --exclude "nohup.out" --bwlimit=1024 windows_user@192.168.100.101::windows/192.168.100.1 /cygdrive/e/test2 <rsync.passwd

就会将linux服务器的文件同步到windows上

2.3.3加入计划任务

Ctrl+R输入control,显示控制面板——》系统和安全——》管理工具——》任务计划程序

创建任务

设置触发器,点击新建,设置每个30分钟触发一次

点击操作——》新建,添加执行脚本

最后点击确定即可(可能有弹窗需要输入用户的密码)

2.3实时同步

2.3.1说明

可以根据业务数据实际情况选择实时、同步还是定时同步,也可以两者都用

使用inotify+rsyncd服务进行实时同步

inotify下载地址:https://sourceforge.net/projects/inotify-tools/

Linux实时同步(windows无inotify版本)

2.3.2部署inotify

tar -zxvf inotify-tools-3.13.tar.gz -C /usr/src/
cd /usr/src/inotify-tools-3.13/
]#  ./configure --prefix=/usr/local/inotify
make && make install

编写同步脚本

vim /root/scripts/inotify_rsync.sh
#!/bin/bash
host=192.168.100.101
src=/test3
des=linux/192.168.100.110
user=linux_user
/usr/local/inotify/bin/inotifywait -mr --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib $src | while read files
do
/usr/bin/rsync -avztopg --password-file=/etc/rsyncd.passwd --port 873 --bwlimit=10240 --delete $src $user@$host::$des
echo "${files} was rsynced" >>/var/log/rsync.log 2>&1
done

给执行权限

chmod +x /root/scripts/inotify_rsync.sh

后台启动即可,观察源地址数据变化后备份服务器上是否有变动

cd /root/scripts
nohup ./inotify_rsync.sh &

三、关于rsync

3.1介绍

Remote Sync(远程同步)

是一个开源的快速备份工具,可以在不同主机之间镜像同步整个目录树,支持增量备份,保持连接和权限,传输之前执行压缩。

在远程同步,负责发起rsync同步操作的客户机成为发起端。而负责响应来自客户机的rsync同步操作的服务器成为同步源。在同步过程中,同步源负责提供文档的原始位置,发起端响应对该位置具有读取权限。

3.2基本语法格式

1)本地使用:

rsync [OPTION...] SRC... [DEST]

2)通过远程 Shell 使用:

拉: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
推: rsync [OPTION...] SRC... [USER@]HOST:DEST

3)访问 rsync 服务器:

拉: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
推: rsync [OPTION...] SRC... [USER@]HOST::DEST
拉: rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
推: rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST

其中:

SRC: 是要复制的源位置

DEST: 是复制目标位置

若本地登录用户与远程主机上的用户一致,可以省略 USER@

使用远程 shell 同步时,主机名与资源之间使用单个冒号“:”作为分隔符

使用 rsync 服务器同步时,主机名与资源之间使用两个冒号“::”作为分隔符

当访问 rsync 服务器时也可以使用 rsync:// URL

“拉”复制是指从远程主机复制文件到本地主机

“推”复制是指从本地主机复制文件到远程主机

当进行“拉”复制时,若指定一个 SRC 且省略 DEST,则只列出资源而不进行复制

3.3选项参数说明

  • 选项 说明
    -a, ––archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等价于 -rlptgoD (注意不包括 -H)
    -r, ––recursive 对子目录以递归模式处理
    -l, ––links 保持符号链接文件
    -H, ––hard-links 保持硬链接文件
    -p, ––perms 保持文件权限
    -t, ––times 保持文件时间信息
    -g, ––group 保持文件属组信息
    -o, ––owner 保持文件属主信息 (super-user only)
    -D 保持设备文件和特殊文件 (super-user only)
    -z, ––compress 在传输文件时进行压缩处理
    ––exclude=PATTERN 指定排除一个不需要传输的文件匹配模式
    ––exclude-from=FILE 从 FILE 中读取排除规则
    ––include=PATTERN 指定需要传输的文件匹配模式
    ––include-from=FILE 从 FILE 中读取包含规则
    ––copy-unsafe-links 拷贝指向SRC路径目录树以外的链接文件
    ––safe-links 忽略指向SRC路径目录树以外的链接文件(默认)
    ––existing 仅仅更新那些已经存在于接收端的文件,而不备份那些新创建的文件
    ––ignore-existing 忽略那些已经存在于接收端的文件,仅备份那些新创建的文件
    -b, ––backup 当有变化时,对目标目录中的旧版文件进行备份
    ––backup-dir=DIR 与 -b 结合使用,将备份的文件存到 DIR 目录中
    ––link-dest=DIR 当文件未改变时基于 DIR 创建硬链接文件
    ––delete 删除那些接收端还有而发送端已经不存在的文件
    ––delete-before 接收者在传输之前进行删除操作 (默认)
    ––delete-during 接收者在传输过程中进行删除操作
    ––delete-after 接收者在传输之后进行删除操作
    ––delete-excluded 在接收方同时删除被排除的文件
    -e, ––rsh=COMMAND 指定替代 rsh 的 shell 程序
    ––ignore-errors 即使出现 I/O 错误也进行删除
    ––partial 保留那些因故没有完全传输的文件,以是加快随后的再次传输
    ––progress 在传输时显示传输过程
    -P 等价于 ––partial ––progress
    ––delay-updates 将正在更新的文件先保存到一个临时目录(默认为 “.tmp”),待传输完毕再更新目标文件
    -v, ––verbose 详细输出模式
    -q, ––quiet 精简输出模式
    -h, ––human-readable 输出文件大小使用易读的单位(如,K,M等)
    -n, ––dry-run 显示哪些文件将被传输
    ––list-only 仅仅列出文件而不进行复制
    ––rsyncpath=PROGRAM 指定远程服务器上的 rsync 命令所在路径
    ––password-file=FILE 从 FILE 中读取口令,以避免在终端上输入口令,通常在 cron 中连接 rsync 服务器时使用
    -4, ––ipv4 使用 IPv4
    -6, ––ipv6 使用 IPv6
    ––version 打印版本信息
    ––help 显示帮助信息
  • 若使用普通用户身份运行 rsync 命令,同步后的文件的属主将改变为这个普通用户身份。

  • 若使用超级用户身份运行 rsync 命令,同步后的文件的属主将保持原来的用户身份。

posted @ 2022-09-05 17:34  沾沾自喜的混子  阅读(933)  评论(0编辑  收藏  举报