将数据同步到其它服务器这里使用Linux同步文件工具rsync来进行文件的同步

  1. rsync
    rsync是类unix系统下的数据镜像备份工具——remote sync。一款快速增量备份工具 Remote Sync,远程同步 支持本地复制,或者与其他SSH、rsync主机同步

  2. 用法
    rsync src dest

这是最简单的用法,表示同步src,dest文件。(即,执行之后,dest的文件与src的相同,以src的为准)

常用选项

-a: 等价于-rlptgoD,归档式
-r: 递归
-l: 复制软件链接
-p: 保留权限信息
-t: 将src的修改时间,同步到dest
-g: 同步组信息(group)
-o: 同步拥有者信息(own)
-D: 保持字符与块设备文件
-z: 启用压缩传输
–delete:如果src没有此文件,那么dest也不能有,即在dest删除src里没有的文件。(如果你使用这个选项,就必须搭配-r选项一起)

例如: 将本地/bak/mysqlbak/文件同步到 远程服务器 /bak/mysql/bak 目录下面 排除 mysqlbak/index目录 通过ssh端口
rsync -vzacu /bak/mysqlbak/ root@192.168.53.86:/bak/mysqlbak --exclude “mysqlbak/index” -e “ssh -p 22”
将远程目录 /bak/mysqlbak下的文件同步到本地 /bak/mysqlbak/目录下
rsync -vzrtopg --progress --delete root@192.168.53.85:/bak/mysqlbak /bak

client连接SERVER
向SERVER端上传文件
/usr/bin/rsync -vzrtopg --progress --password-file=/root/rsync.pas /home/backup rsyuer@192.168.0.217::backup

从SERVER端取文件
/usr/bin/rsync -vzrtopg --progress --delete rsyuer@192.168.0.217::backup /home/backup --password-file=/etc/rsync.pas
3. rsync安装
rsync 服务器安装比较简单,但是安装好rsync后,我们并没有发现配置文件,以及rsync服务器启动程序,不要着急,那是因为每个管理员可能对rsync 用途不一样,所以发行版只是让安装好软件就可以了,配置文件都是让管理员来根据自己的用途和方向来自己设置的。

  1. 检查rsycn是否安装
    检查方法:
    rpm -qa rsync
    出现rsync 包名就是安装了

    如果是以下提示,表示没有安装rsync
  2. 安装rsycn
    rsync的安装可以使用yum直接安装:yum install rsync
  3. 检查rsycn是否安装成功
    检查方法:
    rpm -qa rsync
    出现rsync 包名就是安装成功了
  1. 启用rsync服务器端同步远程文件
    rsycn的服务端为服务器的文件接收端,rsycn的客户端为服务器的文件推动端。
  2. rsycn的服务端/文件接收端配置
  1. 先创建备份目录
  2. 服务端需要开启rsyncd服务
    (1) 添加配置文件rsyncd.conf
    vi /etc/rsyncd.conf
    #以下是全局配置
    log file = /var/log/rsyncd.log
    pid file = /var/run/rsyncd.pid
    lock file = /var/lock/rsyncd
    [zentaobak] #模块名,在源服务器指定这个名字
    comment = sync rsync/home #描述信息
    path = /home/zentao_bak #备份目录
    use chroot=yes #使用chroot,用root权限
    read only = no #设置本地备份目录为读写权限
    uid=root
    gid=root
    max connections=10 #客户端最大连接数
    auth users = root #指定数据同步用户
    secrets file = /etc/rsyncd.pass #指定数据同步用户信息文件
    hosts allow=10.250.151.233 #允许连接的客户端
    ignore errors = yes #忽略出现I/O错误
    timeout = 600

    (2) 创建认证文件
    vi /etc/rsyncd.pass
    ##代码
    root:glong@123 #格式是用户名:密码

    #属主要有权限读这个文件,否则会报没权限
    chmod 600 /etc/rsyncd.pass

    (3) 修改/etc/xinetd.d/rsync文件,disable 改为 no
    service rsync
    {
    disable = no
    socket_type = stream
    wait = no
    user = root
    server = /usr/bin/rsync
    server_args = --daemon
    log_on_failure += USERID
    }

    (4) 启动服务端
    rsync --daemon --config=/etc/rsyncd.conf

注:重启时记得删除rsyncd.pid:rm -rf /var/run/rsyncd.pid

rsync默认端口是873,防火墙要放开该端口,否则客户端会无法连接的
#开放873端口
sudo firewall-cmd --zone=public --add-port=873/tcp --permanent
#重启防火墙服务
sudo systemctl restart firewalld.service

6. rsycn的客户端/文件发送端配置
客户端配置简单 只需要配置密码既可

vi /etc/rsync_client.pwd
##代码
glong@123 #只需要填写rsync服务的密码

#属主要有权限读这个文件,否则会报没权限
chmod 600 /etc/rsync_client.pwd

7. 客户端同步测试
将本地/root/hjl/文件同步到 10.250.151.231远程服务器 zentaobak 目录下面,命令如下:
rsync -auvrtzopgP --progress --password-file=/etc/rsync_client.pwd /root/hjl root@10.250.151.231::zentaobak

注:zentaobak就是服务端/etc/rsyncd.conf里的配置

在服务端检查数据是否传送成功

rsync只是一次性同步,如果需要实时同步就需要引入另一个工具inotify了

  1. crontab定时备份
  1. 备份场景说明
    该路径下每天都会新增3个文件,分别是*code.zip.php、*file.zip.php、*sql.zip.php。我们只需将每天新增3个文件备份到另一个服务器上即可
  2. 编写运行脚本
    vi back.sh
    脚本代码:
    #!/bin/sh
    #备份目录
    BACK_HOME=“/opt/zbox/app/zentaopro/tmp/backup”
    newfile=“aa”
    #获取最新文件夹名
    code_newfile=ls -t $BACK_HOME/*code.zip.php | head -1
    file_newfile=ls -t $BACK_HOME/*file.zip.php | head -1
    sql_newfile=ls -t $BACK_HOME/*sql.php | head -1
    #将最新文件夹下的包远程到服务端取
    rsync -auvrtzopgP --progress --password-file=/etc/rsync_client.pwd $code_newfile root@10.250.151.231::zentaobak
    rsync -auvrtzopgP --progress --password-file=/etc/rsync_client.pwd $file_newfile root@10.250.151.231::zentaobak
    rsync -auvrtzopgP --progress --password-file=/etc/rsync_client.pwd $sql_newfile root@10.250.151.231::zentaobak

脚本说明:
code_newfil:获取最新的code.zip.php文件
file_newfile:获取最新的
file.zip.php文件
sql_newfile:获取最新的* sql.zip.php文件

  1. 为脚本添加执行权限
    chmod 777 back.sh

  2. 验证脚本准确性
    执行客户端的备份sh脚本,成功如下

    检查服务端的数据如下:

  3. 设置crontab定时执行
    vi /etc/crontab
    #在最后一行中加入:
    00 3 * * * root /opt/zbox/back.sh
    #表示每天3点00分执行备份

    注:crontab配置文件格式如下:
    分 时 日 月 周  命令

  4. 重启crontab
    service crond restart

    这样每天就可以执行备份啦

  1. crontab定时清理
    由于磁盘大小受限制,为了避免磁盘空间爆炸,往往需要做定期自动清理,具体清理多少天前的数据,根据实际情况来定
  1. 清理场景说明
    该路径下每天都会新增3个文件,分别是*code.zip.php、*file.zip.php、*sql.zip.php。每天大概新增5G的数据量,长年累计下,数据量会比较大。所以需要做定期清理,建议只保留7天的数据即可
  2. 编写运行脚本
    vi clear.sh
    脚本代码:
    #!/bin/sh
    #禅道备份目录
    zentao_BACK_HOME=“/mnt/main_back/zentao_bak”
    #SVN备份目录
    SVN_BACK_HOME=“/mnt/main_back/svn_bak”
    #删除7天前备份的所有文件(包括文件夹)
    find /mnt/main_back/zentao_bak/* -mtime +7 -exec rm -rf {} ;
    find /mnt/main_back/svn_bak/* -mtime +7 -exec rm -rf {} ;

    注:
    /*
    #查找10天前的所有文件(不包括文件夹)
    find /home/Busines/version/new_version_back/* -type f -mtime +10 -exec ls -l {} ;

#删除10天前的所有文件(不包括文件夹)
find /home/Busines/version/new_version_back/* -type f -mtime +10 -exec rm {} ;

#查找10天前的所有文件(包括文件夹)
find /home/Busines/version/new_version_back/* -mtime +10 -exec ls -l {} ;
#删除10天前的所有文件(包括文件夹)
find /home/Busines/version/new_version_back/* -mtime +10 -exec rm -rf {} ;
*/

  1. 为脚本添加执行权限
    chmod 777 clear.sh

  2. 验证脚本准确性
    执行sh脚本,成功如下

    由于这里不会打印信息,所以具体还得到对应的目录下检查

  3. 设置crontab定时执行
    vi /etc/crontab
    #在最后一行中加入:
    0 1 * * 0 root /mnt/main_back/clear.sh
    #表示每周日1点0分执行清除

    注:crontab配置文件格式如下:
    分 时 日 月 周  命令

  4. 重启crontab
    service crond restart

    这样数据每周就可以清理一次了。

  1. 常见问题
    (1) 客服端连接不上服务端

    问题分析:
    通过再三确定,配置的没有问题的,后来才发现rsync默认的端口是873,初步怀疑端口在防火墙没有开放,被防火墙给限制了。
    解决方案:
    放开rsync端口,操作如下

#开放873端口
sudo firewall-cmd --zone=public --add-port=873/tcp --permanent
#重启防火墙服务
sudo systemctl restart firewalld.service

放开端口之后,传送成功

(2) @ERROR: chroot failed
@ERROR: chroot failed
rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]

原因:
服务器端的目录不存在或无权限,创建目录并修正权限可解决问题。
通过分析,我在服务端的/etc/rsyncd.conf文件里,路径使用了date +%Y%m%d变量,可/etc/rsyncd.conf里又不能跟shell一样很好使用变量,所以导致chroot failed错误,就是找不到路径。
可我要每天进行备份的,所以必须要有日期作为代表。

解决方案一:
直接指定服务端路径,结果又报The --password-file option may only be used when accessing an rsync daemon.错误

网上说这个报错是服务器端没有执行rsync --daemon命令(没有启动服务),可服务器是有启这个服务的,结果这个错误一直无法解决,只能用方案二了。
解决方案二:
置换法,即之前是客户端是作为服务端,之前是服务端的作为客户端。
从SERVER端取文件,由于SERVER端文件路径是固定的,备份路径可以做变量了

两台linux服务器互相自动备份相关推荐

  1. Linux服务器rsync自动备份

    一.在 server 端配置 1. 编辑配置文件 #vi /etc/rsyncd.conf 添加下面的配置参数: uid = nobody # 该选项指定当该模块传输文件时守护进程应该具有的uid.默 ...

  2. 两台linux服务器负载均衡代码实现,nginx实现负载均衡,nginx负载均衡确保两台服务器数据保...

    nginx实现负载均衡,nginx负载均衡确保两台服务器数据保 一.准备篇: Nginx 负载服务器: Centos 6.2 IP:192.168.1.93 WEB服务器: Web1:192.168. ...

  3. linux 远程存储服务器,两台linux服务器远程备份

    1.配置SSH自动安全访问机制登录到离线存储服务器#offsite以后,使用ssh-keygen程序并给出-t dsa选项来创建一个公钥/密钥对.-t选项是必须的,用来指定我们要生成的密钥类型.我们将 ...

  4. linux同步两台服务器时间,同步两台linux服务器时间同步方案

    [root@node1 ~]clock -w [root@node1 ~]hwclock --systohc 后两个命令是把设置的时间写到硬件时间中去(也就是CMOS里面的时间). 第二步, 然后将n ...

  5. linux 隧道服务器,两台linux服务器上建立ip隧道 | 菜鸟博客

    服务器server的地址192.168.18.251,服务器client的地址192.168.18.252. 建立隧道 在服务器server上执行以下命令: ip tunnel add ethn mo ...

  6. linux系统之间无密传输,scp采用无密码在两台linux服务器之间传输数据(示例代码)...

    一.root用户: 1. 在主机A上执行如下命令来生成配对密钥: ssh-keygen -t rsa 按照提示操作,注意,不要输入passphrase.提示信息如下 Generating public ...

  7. 微信公众号 多台服务器,在多台 Linux 服务器上搭建 Pulsar 集群

    作者:高天赐 编辑:Irene Pulsar 是一个支持多租户的.高性能的消息中间件.上一篇我们介绍了如何在 Mac 上搭建 Pulsar 集群,本文详细介绍如何在 3 台 Linux 服务器上搭建 ...

  8. linux文件服务器迁移方案,服务器之间文件备份方案、如何把服务器文件自动备份到另外一台服务器?...

    很多单位都有文件服务器备份的需求,并且常常是把一个服务器的文件自动备份到另外一台文件服务器 .如何实现呢? 一.Windows文件服务器自动备份的方法 Windows文件服务器自动备份的最简单方法是安 ...

  9. 把服务器文件备份到文件服务器,服务器之间文件备份方案、如何把服务器文件自动备份到另外一台服务器?...

    很多单位都有文件服务器备份的需求,并且常常是把一个服务器的文件自动备份到另外一台文件服务器 .如何实现呢? 一.Windows文件服务器自动备份的方法 Windows文件服务器自动备份的最简单方法是安 ...

最新文章

  1. 机器学习中Bagging和Boosting的区别
  2. SOA改变的企业软件生态
  3. [OS复习]文件管理2
  4. SQL注入之时间盲注 和 报错注入(sql-lab第一关为例)
  5. Spring-学习笔记03【Spring的IOC和DI】
  6. apache poi 解析excel
  7. 《终身成长》读书笔记(part1)--杰出的人有着一种能够准确评估自己的能力和不足的独特才能
  8. Linux 主要的发行系统版本介绍
  9. 例7.8 分析下列程序的输出结果。《计算机等级考试二级C++语言》
  10. javascript变量提升/函数提升
  11. 【BZOJ1878】【codevs2307】HH的项链,莫队算法
  12. 问题二十四:怎么模拟ray tracing图形中介质材料的颜色(dielectric)
  13. 机器学习梯度下降举例_举例说明:机器学习
  14. 联想小新触摸板驱动_联想小新智能语音鼠标驱动
  15. 项目进度管理方法——里程碑式管理
  16. 5G移动通信技术基本介绍(附92页PDF下载)
  17. 新版jadx-gui导入dex会提示Bad checksum
  18. STC12C5A60S2_CC2420驱动
  19. 教程:晶莹剔透的水滴绘制过程
  20. Dubbo (五) ---------监控中心

热门文章

  1. 《手把手教你移植InfoNES(到HANKER-LM4F232)》
  2. 基于OpenCASCADE自制三维建模软件(三)搭建开发环境
  3. CF581B Luxurious Houses 模拟
  4. android设备怎么支持8021x,android WiFi ASSOC_REJECT 流程跟踪
  5. underflow 、overflow 下溢和上溢
  6. vue实现一个类似浏览器搜索功能(ctrl + f)
  7. 深井泵房无人值守系统 泵站无人值守平台 智慧水务
  8. 中型研发组织管理之--选择人
  9. 更改计算机用户名批处理,修改计算机名批处理
  10. 酷开系统壁纸模式,百变画作颠覆想象