文章目录

  • 安装调试inotify(主服务器)
  • 调试rsync
  • 编写实时同步脚本(主服务器)
  • 编写定时备份脚本(备份端)

需求:对服务器数据进行实时备份,不能丢失任何已生成数据
思路:需要新增一台备份服务器,利用inotify监测主服务器需要备份的目录下的数据,有任何改动立即调用rsync进行数据同步。并且在备份服务器上对同步数据每天进行定时备份(如果两台都是阿里云服务器,建议开通内网通讯,这样不会影响外网流量而且传输速度很快)

server name IP
主服务器 171.12.13.36
备份服务器 171.12.13.37

安装调试inotify(主服务器)

安装inotify步骤参考:https://blog.51cto.com/sndapk/1252218


调试rsync

ubuntu 16.04默认已安装rsync,rsync服务默认不是启动的,我们要修改rsync文件。

sudo vim /etc/default/rsync

1.修改配置项:

RSYNC_ENABLE=true   #false改true

2.备份端创建账号密码文件,主服务器端只需创建密码文件
备份端创建:

vim /etc/rsyncd.secret
JackMa:wobuxihuanqian

主服务器创建:

vim /etc/rsyncd.pwd
wobuxihuanqian

3.创建配置文件(备份端)
将rsyncd.conf 复制到/etc目录下,并进行配置

sudo cp /usr/share/doc/rsync/examples/rsyncd.conf /etc
sudo vi /etc/rsyncd.conf
#日志存放地址
log file=/home/hyperledger_data/rsync_logs/rsync_logpid file=/var/run/rsyncd.pid
syslog facility=daemon
#以下配置的代表名称
[demo]
comment = demo
path = /home/hyperledger_data/volumes/
use chroot = no
lock file = /var/lock/rsyncd
read only = no
list = yes
uid = 0
gid = 0
#用户名
auth users = JackMa
#密码文件地址
secrets file = /etc/rsyncd.secret
strict modes = yes
#允许同步的客户端地址
hosts allow = 171.12.13.36
ignore errors = yes
ignore nonreadable = yes
transfer logging = yes
log format = %t: host %h (%a) %o %f (%l bytes). Total %b bytes.
timeout = 600
#refuse options = checksum dry-run
dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.

4.两边均启动rsync服务,并设置成开机启动

service rsync start
update-rc.d rsync defaults 90

5.在主服务器端先执行一次全量同步,看下rsync能不能用

#-a 归档模式,表示递归传输并保持文件属性
#-v 显示rsync过程中详细信息
#-z 传输时进行压缩提高效率
#-R 在备份端创建绝对路径上的所有目录
rsync -avzR --password-file=/etc/rsync.pwd /var/lib/docker/volumes/ JackMa@171.12.13.37::demo

编写实时同步脚本(主服务器)

本脚本参考自:http://www.ttlsa.com/web/let-infotify-rsync-fast/

vim /home/backups_script/rsync_scripts
#!/bin/bash
src=/var/lib/docker/volumes/         # 需要同步的源路径
des=demo                             # 目标服务器上 rsync --daemon 发布的名称,rsync --daemon这里就不做介绍了,网上搜一下,比较简单。
rsync_passwd_file=/etc/rsync.pwd     # rsync验证的密码文件
ip1=171.12.13.37                     # 目标服务器1
user=JackMa                      # rsync --daemon定义的验证用户名
cd ${src}                            # 此方法中,由于rsync同步的特性,这里必须要先cd到源目录,inotify再监听 ./ 才能rsync同步后目录结构一致,有兴趣的同学可以进行各种尝试观看其效果
/usr/local/bin/inotifywait -mrq --format  '%Xe %w%f' -e modify,create,delete,attrib,close_write,move $src | while read file         # 把监控到有发生更改的"文件路径列表"循环
doINO_EVENT=$(echo $file | awk '{print $1}')      # 把inotify输出切割 把事件类型部分赋值给INO_EVENTINO_FILE=$(echo $file | awk '{print $2}')       # 把inotify输出切割 把文件路径部分赋值给INO_FILEecho "-------------------------------$(date)------------------------------------"echo $file#增加、修改、写入完成、移动进事件#增、改放在同一个判断,因为他们都肯定是针对文件的操作,即使是新建目录,要同步的也只是一个空目录,不会影响速度。if [ "$INO_EVENT" = "CREATE" ] || [ "$INO_EVENT" = "MODIFY" ] || [ "$INO_EVENT" = "CLOSE_WRITE" ] || [ "$INO_EVENT" = "MOVED_TO" ];thenecho 'CREATE or MODIFY or CLOSE_WRITE or MOVED_TO'rsync -avzcR --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip1}::${des}         # INO_FILE变量代表路径哦  -c校验文件内容#仔细看 上面的rsync同步命令 源是用了$(dirname ${INO_FILE})变量 即每次只针对性的同步发生改变的文件的目录(只同步目标文件的方法在生产环境的某些极端环境下会漏文件 现在可以在不漏文件下也有不错的速度 做到平衡) 然后用-R参数把源的目录结构递归到目标后面保证目录结构一致性fi#删除、移动出事件if [ "$INO_EVENT" = "DELETE" ] || [ "$INO_EVENT" = "MOVED_FROM" ];thenecho 'DELETE or MOVED_FROM'rsync -avzR --delete --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip1}::${des}#看rsync命令 如果直接同步已删除的路径${INO_FILE}会报no such or directory错误 所以这里同步的源是被删文件或目录的上一级路径,并加上--delete来删除目标上有而源中没有的文件,这里不能做到指定文件删除,如果删除的路径越靠近根,则同步的目录月多,同步删除的操作就越花时间。这里有更好方法的同学,欢迎交流。fi#修改属性事件 指 touch chgrp chmod chown等操作if [ "$INO_EVENT" = "ATTRIB" ];thenecho 'ATTRIB'if [ ! -d "$INO_FILE" ]                 # 如果修改属性的是目录 则不同步,因为同步目录会发生递归扫描,等此目录下的文件发生同步时,rsync会顺带更新此目录。thenrsync -avzcR --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip1}::${des}fifi
done
~

将实时脚本设置成开机自启动

vim /etc/rc.local
#这句话加在exit0之前
nohup bash /home/backups_script/rsync_scripts >> /home/backups_script/rsync.log 2>&1 &

编写定时备份脚本(备份端)

vim /home/hyperledger_data_bakup/backup.sh
#!/bin/bash
bak_dir=/home/hyperledger_data_bakup
tmp_dir=/home/hyperledger_data_bakup/tmp
target_dir=/home/hyperledger_data#创建一个临时文件(要保存备份的路径)
mkdir $tmp_dir
#数据存在backups目录下,备份到beifen目录下,所以先将数据拷过来
cp -r $target_dir  $tmp_dir
#将数据所在文件夹beifen打包
tar -zcPvf $bak_dir/backup$(date +%Y%m%d).tar.gz $tmp_dir
#删除临时文件内容
rm -rf $tmp_dir
#删除改文件夹下超过10天的文件
find $bak_dir -mtime +10 -name "*.tar.gz" -exec rm -rf {} \;
~

利用crontab进行定期执行备份脚本

crontab -e
#每天的凌晨两点对同步数据进行全量备份
0 2 * * * bash /home/hyperledger_data_bakup/backup.sh

服务器数据的实时备份与定时备份(rsync+inotify)相关推荐

  1. [转帖]tar高级教程:增量备份、定时备份、网络备份

    tar高级教程:增量备份.定时备份.网络备份 作者: lesca 分类: Tutorials, Ubuntu 发布时间: 2012-03-01 11:42 ė浏览 27,065 次 61条评论 一.概 ...

  2. navcat定时备份mysql_MySQL——定时备份,保留最新31天的数据

    一.背景 概述: 对于我们的生产数据库,都需要定时做备份,以免数据丢失.比如每日备份,同时也需要将以前的进行清理.此处我展示的是只保留最新的 31 天数据. 二.备份命令使用 1,mysqldump ...

  3. mysql 定期备份_MySQL定时备份(全量备份+增量备份)

    MySQL 定时备份 更多binlog的学习参考马丁传奇的 MySQL的binlog日志,这篇文章写得认真详细,如果看的认真的话,肯定能学的很好的. 如果查看binlog是出现语句加密的情况,参考 m ...

  4. Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步

    1.什么是 Rsync? Rsync 是一个开源的快速备份工具,是Linux和UNIX操作系统默认安装的组件之一,可在不同主机间镜像同步整个目录,并支持增量备份文件传输,保持链接和权限,采用优化的同步 ...

  5. linux tar 增量备份,tar高级教程:增量备份、定时备份、网络备份

    一.概述 备份与恢复对于系统维护而言是至关重要的事情.不合理的备份与还原会让你的数据面临丢失的风险.许多用户都在丢失重要数据后才意识到这种风险.而要从这种情况恢复数据将是非常耗时并且困难的.所以我们应 ...

  6. linux mysql定时删除数据_让linux每天定时备份MySQL数据库并删除五天前的备份文件...

    MYSQL定期备份是一项重要的工作,但人工操作太繁琐,也难避免有所疏漏,使用下面的方法即可让系统定期备份数据.利用系统crontab来定时执行备份文件,按日期对备份结果进行保存,达到备份的目的. 1. ...

  7. java mysql自动备份_java定时备份数据之二_MySQL

    以mysql为例: BackupDb.java数据库备份类: public class BackupDb { public static boolean sqlDump(String cmd,Stri ...

  8. linux定时备份mysql_linux定时备份MySQL数据库并删除七天前的备份文件

    #!/bin/bash # Name:bakmysql.sh # This is a ShellScript For Auto DB Backup and Delete old Backup #备份地 ...

  9. linux数据库云盘备份,linux定时备份本地文件或数据库到百度云盘bypy

    环境配置 python3.7+centos7 查看centos版本信息 cat /etc/redhat-release 查看linux版本 cat /proc/version 查看python版本 p ...

最新文章

  1. 服务器内存傲腾基本参数信息,服务器加傲腾内存
  2. Ubuntu中NS2安装详细教程
  3. 【ATT】Reverse Nodes in k-Group
  4. TCA9548A iic地址扩展器件 树莓派JAVA版教程
  5. 网络编程(基于udp协议的套接字/socketserver模块/进程简介)
  6. 论计算机应用技术对企业信息化的影响
  7. 飞机模拟flightgear
  8. 1块钱的路由器,10亿美金的小米网络
  9. linux 远程安装teamviewer,如何在CentOS 7上安装TeamViewer
  10. 高德地图获取经纬度、高德地图坐标转为百度地图坐标
  11. struct files_struct和struct fdtable
  12. nginx 403错误
  13. 腾达ac1200开虚拟服务器,腾达F1200 11AC双频无线路由器的上网设置教程
  14. Python读写矢量数据(2)矢量数据写入(属性数据)——Python地理数据处理学习分享
  15. Git版本控制管理——分支
  16. vscode无法连接扩展市场问题
  17. 数据库常用命令,不积硅步无以至千里
  18. 电动汽车电池管理系统预充电阻及预充时间的计算
  19. 快速恢复Safengine Protector的Shadow DLL
  20. 02-文档扫描OCR识别

热门文章

  1. 投中谷歌、亚马逊、推特、Facebook,公认的“互联网风投之王”是如何养成的?
  2. artTemplate模板引擎及ajax封装
  3. 构建基于ubuntu 12.04的Sedona开发环境
  4. 如何根据单号批量查询德邦快递的物流信息
  5. 需要加强注意力集中训练
  6. 隐私合规:移动SDK安全要求及测试内容
  7. MCE | ATM 激酶活化变单体后的神奇开挂!
  8. 计算机不支持win10 1809更新,win10更新版本1809后,完全关闭系统自动更新方法,亲测可行...
  9. 编写一个学生类,有姓名,年龄,性别,英语成绩,数学成绩,语文成绩 (扩展?)
  10. Numpy cheatsheet