调用rsync同步文件,从yaml文件读取配置。简化rsync使用,和方便管理备份项更改。未来将提供web界面添加yaml配置。
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
.idea
exclude
playbook
script
README.md
config.conf
pyrsync.py
requirements.txt

README.md

Pyrsync

调用rsync同步文件,从yaml文件读取配置。简化rsync使用,和方便管理备份项更改。未来将提供web界面添加yaml配置。

安装依赖

sudo pip install -r requirements.txt

sudo yum install -y rsync

使用说明

  • 新建项目yaml配置文件 cp playbook/default.yaml.template playbook/default.yaml

  • 配置好项目使用哪个账户复制,ip、备份目录之类的。

  • 要提前做好要备份的主机公钥认证,好让rsync不用输入密码。

  • 执行 ./pyrsync.py

yaml配置文件说明

  • actor 项说明
作用
name 做了ssh公钥认证登录的用户
IP 要备份的内容所在的服务器IP
port ssh端口
action rsync的参数项可以自由写 如:-avz --delete
  • execute 项说明 脚本统一放在script目录

填写脚本文件名,理论支持shell,Python等, 一定要在脚本开头定义好解析器。如bash #!/bin/bash

作用
pre-local 同步前在本机执行
pre-remote 同步前在远程机执行
post-remote 同步后在远程机执行
post-local 同步后在本机执行
  • playbook剧本sences场景项说明

  • 一个场景配置一个目录、和一个排除文件,排除文件目录在exclude,填写文件名即可。排除支持通配符,一行一个筛选项。cvs.txt是例子。

作用
item 要备份的目录
savepath 保存到本地的目录
exclude 描述排除文件的文件名 在exclude目录

使用场景

我要定时对 192.168.168.19上的三个项目的uploads目录进行同步备份。

分别是

  • /data/web1/uploads
  • /data/web2/uploads
  • /data/web3/uploads

还要定时导出MySQL数据库test2,到/data/sql,并同步备份过来。但是过滤掉.git目录、.svn目录。

备份内容保存到本地 /backup/node1 目录

根据上面信息,可以配置一个如下的yaml文件。

test.yaml (名字可以随意取,后缀一定得是yaml)

actor:
  name: root
  ip: 192.168.168.19
  port: 22
  action: -avz

execute:
  pre-local:
  pre-remote: test.sh
  post-remote:
  post-local:

playbook:
  sences:
    - 1:
      item: /data/web1/uploads
      savepath: /backup/web1
      exclude: cvs.txt
    - 2:
      item: /data/web2/uploads
      savepath: /backup/web2
      exclude: cvs.txt
    - 3:
      item: /data/web3/uploads
      savepath: /backup/web3
      exclude: cvs.txt
    - 4:
      item: /data/sql
      savepath: /backup/sql
      exclude: cvs.txt

上面pre-remote的test.sh内容如下

#!/bin/bash

mysqldump -uroot -predhat test2 > /data/sql/test2.sql

备份前目录情况如下:

远程机/data/ :

/data
├── .git
│   └── 11
├── sql
├── web1
│   ├── .git
│   │   └── master
│   └── uploads
│       └── web1.html
├── web2
│   ├── .svn
│   │   └── entries
│   └── uploads
│       └── web2.png
└── web3
    └── uploads
        └── web3.php

10 directories, 6 files

本机 /backup/node1/:

node1

0 directories, 0 files

现在执行./pyrsync.py

执行后

/backup/
├── sql
│   └── sql
│       └── test2.sql
├── web1
│   └── uploads
│       └── web1.html
├── web2
│   └── uploads
│       └── web2.png
└── web3
    └── uploads
        └── web3.php

8 directories, 4 files

项目地址: https://github.com/onecer/Pyrsync