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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 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

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
5月前
|
存储 运维 Python
基于 ChunkServer 的数据备份与恢复方案
【8月更文第30天】在分布式文件系统中,数据的安全性和持久性是至关重要的。为了应对可能发生的硬件故障、网络中断等问题,需要有一套完善的备份与恢复方案。本文将详细介绍如何设计和实现一套基于 ChunkServer 的数据备份与恢复流程,确保数据的完整性和持久性。
66 0
|
4月前
|
数据安全/隐私保护
服务器备份的常见方法包括完全备份、增量备份、差异备份和实时备份
服务器备份的常见方法包括完全备份、增量备份、差异备份和实时备份
567 3
|
6月前
|
存储 安全 容灾
同步与备份
【7月更文挑战第1天】同步与备份
187 70
|
NoSQL MongoDB
副本集mogodb 物理备份与恢复
副本集mogodb 物理备份与恢复
222 0
xtrabackup 增量,全备份,恢复备份
mysql5x 版本对应xrtabackup2.4
181 0
|
存储 弹性计算
混合云备份服务异地备份和恢复实践
阿里混合云备份服务是一套已经商业化的原生备份服务,提供了简单易用,并且高效安全的数据保护方案。阿里混合云备份服务能够定期的对指定关键数据进行增量的扫描,并对备份的数据采用了高效的重删加压缩的算法,在为关键数据保驾护航的同时又极大的减少了备份数据的存储空间占用,有效的节省成本。
2506 0
|
应用服务中间件 nginx Perl
|
数据安全/隐私保护 算法 Shell
|
数据库 数据挖掘 关系型数据库

热门文章

最新文章