用 rsync 实现高速异地全量备份大文件

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: mysqldump 数据库的备份文件为完全备份文件。每天远程复制文件需要大量的时间和带宽。但实际上每天变化的只是数据中的一小部分。在不使用数据库自身的备份机制的前提下,可以只备份变化的那一小部分么? 本软件尝试做这件事。

frsync 每日增量备份数据库文件


mysqldump 数据库的备份文件为完全备份文件。每天远程复制文件需要大量的时间和带宽。

但实际上每天变化的只是数据中的一小部分。在不使用数据库自身的备份机制的前提下,

可以只备份变化的那一小部分么? 本软件尝试做这件事。


本软件的思想是: 第一天是完全备份, 将远程的备份完整地复制到本地。

备份脚本

#!/bin/bash
time="$(date +"%Y%m%d")"
MYSQLDUMP="$(which mysqldump)"
$MYSQLDUMP -u $db_user -h $db_host -p$db_passwd $db | $GZIP -9 --rsyncable > "$backup_dir/$db.$time.gz"
注意:rsyncable选项,这是能增量同步的关键。


以前一天的文件为备份基础

第二天在本地服务器用前一天的备份文件复制一个假备份

cp  aaa-20160110.gz  aaa-20160111.gz

或用下面的脚本

#!/bin/bash
time="$(date +"%Y%m%d")"
time_lastday="$(date --date='1 days ago' +"%Y%m%d")"
for db in `cat /home/user1/scripts/list.txt`
do
    /bin/cp  "$backup_dir/$db.$time_lastday.gz"  "$backup_dir/$db.$time.gz"
done

以上操作在本程序里自动实现


让本地的假备份与远程的备份文件进行rsync同步

rsync  user@remoteserver:/backupdir/aaa-20160111.gz  /localbackupdir/aaa-20160111.gz

这种备份可能有点用,但更好的可能还是日志增量备份,而不是这种技巧


jar包编译

mvn assembly:assembly


脚本运行, 服务器端

rsync --daemon

rsync以服务的形式监听873端口

服务器端配置文件/etc/rsyncd.conf

uid = nobody
gid = nobody
use chroot = no
max connections = 4
pid file =/var/run/rsyncd.pid
lock file =/var/run/rsync.lock
log file =/var/log/rsyncd.log
[data]
path = /home/data/
ignore errors
read only = true
list = false    
hosts allow = 12.34.56.78
hosts deny = 0.0.0.0/32
auth users = backup
secrets file = /etc/backserver.pas
/etc/backserver.pas为明文密码文件,权限应为 600, 里面为文本格式:
username1:password1
username2:password2


客户端脚本

以指定密码文件的方式,可以免输入密码, 最终:每天运行以下脚本即可,jar 里的java程序将自动查找备份机本地目录里的最新备份的文件,以最新的文件为蓝本,开始同步。

#!/bin/sh
server_dir=/data
local_dir=/home/data
JAVA=$(which java)
$JAVA -jar frsync-0.0.1-SNAPSHOT-jar-with-dependencies.jar \
        --remote="--password-file rsync.pass  rsync://username@myserver.com:${server_dir}" \
    --localpath="${local_dir}" db1. db2. db3.

rsync.pass 明文保存对应服务器端指定的密码,权限也必须为600,这里用户名是username

实测表明,一个1G左右的备份文件,如果增量只有几M,仅需几秒钟即可完成远程备份。


代码已开源, 欢迎star, fork

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
4月前
|
数据库
HBR混合云备份中的影响是在全量备份还是增量备份
【1月更文挑战第3天】【1月更文挑战第13篇】HBR混合云备份中的影响是在全量备份还是增量备份
30 5
|
存储 Unix BI
数据备份和恢复方案(1)
数据备份和恢复方案(1)
204 0
|
存储 弹性计算
混合云备份服务异地备份和恢复实践
阿里混合云备份服务是一套已经商业化的原生备份服务,提供了简单易用,并且高效安全的数据保护方案。阿里混合云备份服务能够定期的对指定关键数据进行增量的扫描,并对备份的数据采用了高效的重删加压缩的算法,在为关键数据保驾护航的同时又极大的减少了备份数据的存储空间占用,有效的节省成本。
2325 0
|
应用服务中间件 nginx Perl
|
数据安全/隐私保护 算法 Shell
|
算法 网络安全 数据安全/隐私保护
|
数据库 数据挖掘 关系型数据库
|
监控 开发工具 数据安全/隐私保护