Rsync 及 Inotify
实例1: inotify + rsync客户端 实时备份
linux主服务器端
# yum install inotify-tools \\ epel源
# vim /etc/sysctl.conf \\ 修改默认inotify参数 默认在/proc/sys/fs/inotify/下
fs.inotify.max_queued_events = 32768 \\ 表示监控事件队列
fs.inotify.max_user_instances = 1024 \\ 表示最多监控实例数
fs.inotify.max_user_watches = 9999999 \\ 表示每个实例最多监控文件数
# sysctl -p
# cd /data/shell/
# vim inotify_web.sh
#!/bin/bash
src=/data/www/
/usr/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e close_write,create,modify,move,delete $src | while read
do
echo $src >> /tmp/inotofy_web.log
rsync -avzP --delete --port=63873 /data/www/ --exclude '.*.swp' --exclude 'log' www@192.168.10.12::cp_web
rsync -avzP --delete --port=63873 /data/www/ --exclude '.*.swp' --exclude 'log' www@192.168.10.13::cp_web
done
# chmod +x inotify_web.sh
# chmod +x /etc/rc.d/rc.local
# echo "/data/shell/inotify_web.sh &>/dev/null &" >> /etc/rc.d/rc.local \\ 开机启动
# ./inotify_web.sh &>/dev/null & \\ 手动执行
linux从服务器端
# yum install rsync
# vim /etc/rsyncd.conf \\ 默认配置文件为空 需要新建
uid = www
gid = www
port = 63873
use chroot = no
max connections = 10
hosts allow = 47.91.219.64
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
[cp_web]
path = /data/www
read only = no
# groupadd www
# useradd -g www www -s /sbin/nologin
# chown -R www.www /data/www \\ 需要给目录权限 属主给www
# rsync --daemon \\ centos 6 启动服务 873端口被监控
# pkill rsync \\ 停止服务
# ss -tnl \\ 63873端口被监控 默认为873端口
# echo "/usr/bin/rsync --daemon" >> /etc/rc.d/rc.local \\ 加入开机启动
# chmod +x /etc/rc.d/rc.local \\ 我开机启动文件添加执行权限
# iptables -A INPUT 4 -P tcp --dport 63873 -j ACCEPT \\ 防火墙放行
实例2: inotify + rsync使用ssh 实时备份
# ssh-keygen \\ 主服务器上生成公钥和秘钥 一路回车 从服务器只需要有文件夹
# ssh-copy-id root@192.168.10.12 \\ 拷贝到从服务器上
# ssh 192.168.10.12 \\ 不用密码即可登录10.12
# yum install inotify-tools \\ epel源
# vim /etc/sysctl.conf \\ 修改默认inotify参数 默认在/proc/sys/fs/inotify/下
fs.inotify.max_queued_events = 32768 \\ 表示监控事件队列
fs.inotify.max_user_instances = 1024 \\ 表示最多监控实例数
fs.inotify.max_user_watches = 9999999 \\ 表示每个实例最多监控文件数
# sysctl -p
# cd /data/shell/
# vim inotify_web.sh
#!/bin/bash
src=/data/www/
/usr/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e close_write,create,modify,move,delete $src | while read
do
echo $src >> /tmp/inotofy_web.log
rsync -avzP --delete /data/www/ --exclude '.*.swp' --exclude 'log' root@192.168.10.12:/data/www/
rsync -avzP --delete /data/www/ --exclude '.*.swp' --exclude 'log' root@192.168.10.13:/data/www/
done
# chmod +x inotify_web.sh
# chmod +x /etc/rc.d/rc.local
# echo "/data/shell/inotify_web.sh &>/dev/null &" >> /etc/rc.d/rc.local \\ 开机启动
# ./inotify_web.sh &>/dev/null & \\ 手动执行
# ps aux | grep inotify_web.sh
# pkill inotify_web.sh \\ 结束此脚本
实例3: 创建计划任务 自动备份 \\ 备份数据库 待修改 应备份到.sql文件
# vim /data/shell/backup.sh
#!/bin/bash
rsync -avzP --delete /data/mysql/teo/ /data/bak/teo.bak/
rsync -avzP /data/mysql/teo/ /data/bak/teo.bak2/
# chmod + x /data/shell/backup.sh
# crontab -e \\ 编辑定时任务
0 1 * * * /data/shell/backup.sh & \\ 每天的1点备份 顺序*为分钟 小时 天 月 星期 +执行的命令
实例4: windows与linux实现自动同步自动备份的数据库
windows客户端
解压程序 cwrsync_5.5.0_x86_free 客户端
执行cwrsync.cmd 安装
执行mysql-bak.bat 可以实现远程备份
cd c:\
C:\rsync\bin\rsync.exe -avzP --delete www@47.91.219.64::mysql_bak ./db/
执行crontab.vbs 可添加定时任务 每天自动执行mysql-bak.bat
linux 服务器
# yum install rsync \\ 参阅rsync安装即可
# chmod + x Mysql_bak.sh \\ mysql自动备份脚本
# crontab -e
0 1 * * * /data/shell/backup.sh & \\ 每天的1点备份
实例5: windows 和 windows 之间 同步
服务器端
控制面板 --> 用户账户 --> 添加用户账户 --> 用户名: www 密码: Teo@1234 \\ 在2012中需要 2008不需要
安装 cwRsyncServer_4.1.0.exe 用户名:www 密码:Teo@1234 \\ 不添加用户 没有 RsyncServer服务
复制 rsyncd.conf 到 安装目录 C:\Program Files (x86)\ICW\
创建 共享目录 D:\web
D盘属性 --> 安全 --> 编辑 --> 添加 --> 高级 --> 立即查找 --> www --> 完全控制 权限
cmd --> services.msc --> RsyncServer --> 右键属性 --> 启动类型 --> 自动 --> 启动
cmd --> netstat -ano 查看63873端口是否被监听 如果同步失败在检查防火墙是否放行
rsyncd.conf
uid = 0
gid = 0
port = 63873
use chroot = no
max connections = 10
hosts allow = 192.168.227.128 192.168.227.1 192.168.228.129
lock file = rsync.lock
log file = rsyncd.log
ignore errors
[web]
path = /cygdrive/d/web
read only = no
客户端
cwRsync_5.4.1 复制到C:\ 根目录下
添加rsync.bat到定时任务即可 \\ 亦可使用crontab.vbs 实现 实时备份 参照实例4设置
rsync.bat
@echo off
set RSYNC_HOME=C:\cwRsync_5.4.1
cd %RSYNC_HOME%
rsync -avzP --delete --progress --port=63873 /cygdrive/d/web/ www@192.168.227.129::web
Rsync常用的命令
使用ssh
# rsync /etc/hosts /data/ \\ 复制 相当于 cp
# rsync -avzP /opt /data/ \\ 复制 目录 cp -r
# rsync -avzP ./aa.txt root@192.168.10.101:/data/ \\ 推送文件或目录 默认ssh端口22
# rsync -avzP /data root@192.168.10.10::/data/ --password-file=/etc/rsync.passwd \\ 推送到目标 ssh协议 在文件中指明密码
# rsync -avzP ./a -e 'ssh -p 65522' root@192.168.10.101:/data/ \\ 指明ssh 端口 不用服务端 使用ssh传输
# rsync -avzP root@192.168.10.101:/data/abc ./ \\ 拉取abc目录到当前目录下 使用ssh拉取
使用服务器
# rsync -avzP --delete www@192.168.10.30::cp_web /data/www/ \\ 拉取目标到本地 只需要目标安装rsync
# rsync -avzP --delete /data/www/ www@192.168.10.30::cp_web \\ 本地推送到目标 只需要目标安装rsync
rsync 选项 用户名@备份源服务器IP::共享模块名 目标目录
编译安装inotify
# tar zxf inotify-tools-3.13.tar.gz
# cd inotify-tools-3.13
# ./configure
# make -j 4
# make install
配置文件详解
# /etc/rsyncd: configuration file for rsync daemon mode
# See rsyncd.conf man page for more options.
# configuration example:
uid = www \\ 运行进程的身份
gid = www \\ 用户组 同nginx就可以
port = 873 \\ 默认为端口为873
use chroot = no \\ 如果为yes是锁定家目录 rsync被黑了 黑客无法再rsync运行的家目录之外创建文件
max connections = 10 \\ 最大连接数 多少个并发往上传数据
hosts allow = 47.91.219.64 \\ 允许哪个ip连接 *代表所有 两个ip使用空格隔开 段可以表示10.0.0.0/24
hosts deny = 0.0.0.0/32 \\ 拒绝
lock file = /var/run/rsync.lock \\ 锁文件
log file = /var/log/rsyncd.log \\ 日志文件
ignore errors \\ 忽略错误
pid file = /var/run/rsyncd.pid \\ pid 文件
exclude = lost+found/
transfer logging = yes
timeout = 900 \\ 超时时间
ignore nonreadable = yes
dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
auth users = rsync_backup \\ 认证用户 虚拟用户
secrets file = /etc/rsync.password \\ 上面的虚拟用户的密码文件
motd file = /etc/rsyncd.motd \\ 客户端登录后的弹出的信息 需要创建
[cp_web] \\ 模块 名称 标示 很重要
path = /data/www \\ 备份的路径
read only = no \\ 可以写 yes为只读
list=yes \\ 允许查看模块信息
auth users = rsync_backup \\ 认证用户 虚拟用户
secrets file = /etc/rsync.password \\ 上面的虚拟用户的密码文件
comment = ftp export area
常用参数详解:
-a 归档模式 表示以递归方式传输文件,并保持所有文件属性. 相当于-rltopgD
-r 对子目录以递归模式处理
-l 保持符合连接文件
-H 保持硬链接文件
-P 保持文件权限
-t 保持文件时间
-g 保持文件数组信息
-o 保持文件属主信息
-D 保持设备文件和特殊文件
-v 详细输出模式
-n 显示哪些文件将被传输
-z 在传输文件时进行压缩处理
-q 精简输出模式
-h 输出文件小打使用易读的单位 K M等
-e 使用信道协议 指定替代rsh的shell程序 如ssh
-exclude= 指定配出不需要传输的文件
--delete 以源(SRC)为主,对目标(DEST)进行同步。多则删之,少则补之。注意"--delete"是在接收端执行的,所以它是在 exclude/include规则生效之后才执行的。
注:
1 如果使用密码认证需要如下命令
# echo "rsync_backup:123456" >> /etc/rsync.password \\ 为配置文件中auth users = rsync_backup 的值
# chmod 600 /etc/rsync.password \\ 只有root可以查看 对密码安全 此文件必须为700或600否则身份验证会失败 会和密码错误信息一样
2 如果开启 motd file = /etc/rsyncd.motd 需创建
# echo "welcome to backup server" > /etc/rsyncd.motd \\ 提示信息 欢迎页面类似
3 关于自动备份脚本
# vim back.sh
#!/bin/bash
export RSYNC_PASSWORD=123456 \\ 在设置密码的情况下 设置此变量 把密码传入到此变量 可以不用输入密码
rsync -avz www@192.168.10.30::www /data/www/
4 防火墙放行用到的命令
# iptables -A INPUT 4 -P tcp --dport 873 -j ACCEPT
5 关于定时任务简单描述 详情参见crontab章节