惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
V2EX
W
WeLiveSecurity
IT之家
IT之家
A
About on SuperTechFans
B
Blog
L
LangChain Blog
H
Help Net Security
Engineering at Meta
Engineering at Meta
Recent Announcements
Recent Announcements
Google Online Security Blog
Google Online Security Blog
宝玉的分享
宝玉的分享
MyScale Blog
MyScale Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
N
News and Events Feed by Topic
Schneier on Security
Schneier on Security
GbyAI
GbyAI
博客园 - 叶小钗
人人都是产品经理
人人都是产品经理
S
SegmentFault 最新的问题
Cloudbric
Cloudbric
WordPress大学
WordPress大学
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Y
Y Combinator Blog
S
Security Affairs
The Last Watchdog
The Last Watchdog
H
Heimdal Security Blog
T
The Blog of Author Tim Ferriss
Last Week in AI
Last Week in AI
博客园 - 聂微东
H
Hackread – Cybersecurity News, Data Breaches, AI and More
P
Privacy & Cybersecurity Law Blog
V
Visual Studio Blog
H
Hacker News: Front Page
Recorded Future
Recorded Future
Cyberwarzone
Cyberwarzone
L
Lohrmann on Cybersecurity
Simon Willison's Weblog
Simon Willison's Weblog
P
Privacy International News Feed
博客园 - 三生石上(FineUI控件)
大猫的无限游戏
大猫的无限游戏
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Blog — PlanetScale
Blog — PlanetScale
G
Google Developers Blog
aimingoo的专栏
aimingoo的专栏
C
Cybersecurity and Infrastructure Security Agency CISA
AWS News Blog
AWS News Blog
Jina AI
Jina AI
N
News | PayPal Newsroom
S
Schneier on Security

博客园 - bwg007

分享一款优惠码复制插件-lecouponcopy WordPress数据库MyISAM表转换成InnoDB表的具体方法是怎么样的? 分享一款实用的WordPress自定义关键字自动替换插件-LeKeyReplace 分享一款简单小巧的Windows录屏软件-Wink 苹果手机iPhone6版本过低无法安装微信的解决办法 亚马逊免费云服务器申请教程2025年最新版 频繁收到腾讯云恶意文件通知"/tmp/phpaQUscx'的原因及解决办法 WordPress外部链接添加nofolow标签的设置方法(插件法) WordPress古腾堡编辑器和经典编辑器详细对比,哪个好用? PDF编辑工具有哪些 5款好用的PDF批注编辑软件推荐 Mac截图软件工具哪个好用(6款Mac截图软件工具推荐) 阿里云轻量应用服务器快速安装WordPress网站系统 如何在FreeBSD 12上安装osTicket IPFILTER快速入门指南 typecho程序.htaccess文件 如何安装和配置WordPress(WP)程序 2019阿里云双十二活动发布 香港服务器首年119元 Vultr VPS修改root密码的方法 - bwg007 了解JavaScript的日期和时间
如何使用 Rsync 实现服务器与网站数据的增量同步备份?
bwg007 · 2026-02-25 · via 博客园 - bwg007

使用 rsync实现服务器与网站数据的增量同步备份,核心思路是利用其高效的增量算法,通过 SSH 或 rsync daemon 模式进行数据同步。以下是两种主流方案的详细步骤。

💡 核心思路

  1. 增量同步原理rsync通过对比源和目标文件的修改时间、大小等信息,仅传输差异部分,极大节省带宽和时间。首次备份为全量,后续均为增量。

  2. 两种主流方式

    • SSH 模式:通过 SSH 协议传输,配置简单,安全性高,是大多数场景的首选。

    • Rsync Daemon 模式:目标服务器运行 rsync服务,通过 rsync://协议同步,适合多客户端备份到同一服务器的场景。


🔧 方案一:通过 SSH 实现增量同步 (推荐)

此方案适用于将网站数据从生产服务器增量备份到另一台备份服务器或本地机器。

1. 环境准备

  • 两台 Linux 服务器:一台作为源服务器(网站所在),一台作为备份服务器。

  • SSH 互通:确保两台服务器之间可以通过 SSH 免密登录。

配置 SSH 免密登录 (在源服务器执行):

bash

生成密钥对(若已存在可跳过)

ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa -N ""

将公钥复制到备份服务器

ssh-copy-id backupuser@BACKUP_SERVER_IP

测试免密登录

ssh backupuser@BACKUP_SERVER_IP "echo 'SSH 免密登录测试成功'"

2. 执行增量同步

基础命令:

bash

rsync -avz -e "ssh -p 22" \

--delete \

--exclude='*.log' \

--exclude='cache/' \

/var/www/html/ \

backupuser@BACKUP_SERVER_IP:/backup/website/

参数解析:

  • -a: 归档模式,保留文件权限、时间戳等所有属性,是增量备份的基础。

  • -v: 显示详细过程。

  • -z: 传输时压缩数据,节省带宽。

  • -e "ssh -p 22": 指定使用 SSH 协议及端口。

  • --delete: 镜像同步。删除目标端存在而源端已不存在的文件。请谨慎使用,建议先用 --dry-run测试。

  • --exclude: 排除不需要备份的文件或目录,如日志、缓存等。

  • 路径注意: 源路径末尾的 /表示同步目录内的内容,而不是目录本身。

首次备份建议:

在正式运行前,强烈建议先使用 --dry-run参数进行模拟,检查将要执行的操作是否正确。

bash

rsync -avz -e "ssh -p 22" \

--delete --dry-run \

--exclude='*.log' \

/var/www/html/ \

backupuser@BACKUP_SERVER_IP:/backup/website/

确认无误后,去掉 --dry-run执行真实备份。

3. 自动化定时备份

使用 crontab将同步任务设置为定时执行。

编辑定时任务:

bash

crontab -e

添加以下内容(示例为每天凌晨 2 点执行):

text

0 2 * * * /usr/bin/rsync -az -e "ssh -p 22" --delete --exclude='*.log' --exclude='cache/' /var/www/html/ backupuser@BACKUP_SERVER_IP:/backup/website/ >> /var/log/rsync_website.log 2>&1

参数解析:

  • 0 2 * * *: cron 时间表达式,代表每天 02:00 执行。

  • >> /var/log/rsync_website.log 2>&1: 将标准输出和错误输出都追加到日志文件,便于排查问题。


⚙️ 方案二:通过 Rsync Daemon 实现

此方案适用于将多台服务器的数据统一备份到一台专用的备份服务器。

1. 在备份服务器上配置 Rsync Daemon

① 安装 rsync (若未安装):

bash

CentOS/RHEL

yum install -y rsync xinetd

Ubuntu/Debian

apt update && apt install -y rsync

② 创建配置文件 /etc/rsyncd.conf:

ini

uid = root

gid = root

use chroot = no

max connections = 4

pid file = /var/run/rsyncd.pid

lock file = /var/run/rsync.lock

log file = /var/log/rsyncd.log

定义一个名为 "website" 的备份模块

[website]

path = /backup/website/ # 备份目标目录

comment = Web Site Backup

read only = no # 允许写入

list = no

hosts allow = SOURCE_SERVER_IP # 允许连接的源服务器IP

auth users = rsyncuser # 认证用户名

secrets file = /etc/rsync.passwd # 密码文件

③ 创建密码文件 /etc/rsync.passwd:

text

rsyncuser:YourStrongPassword

④ 设置权限并启动服务:

bash

chmod 600 /etc/rsync.passwd

若使用 xinetd 管理

sed -i 's/disable.=.yes/disable = no/' /etc/xinetd.d/rsync

service xinetd restart

或直接作为守护进程启动

rsync --daemon --config=/etc/rsyncd.conf

2. 在源服务器上执行同步

① 创建密码文件 /etc/rsync.pass(仅含密码):

text

YourStrongPassword

② 设置权限:

bash

chmod 600 /etc/rsync.pass

③ 执行同步命令:

bash

rsync -avz --delete \

--password-file=/etc/rsync.pass \

/var/www/html/ \

rsyncuser@BACKUP_SERVER_IP::website/

此命令的格式为 rsync [选项] 源路径 用户名@服务器IP::模块名


🗄️ 数据库备份策略

rsync适用于同步文件,但数据库备份有其特殊性,推荐结合使用 mysqldumpxtrabackup

推荐流程:

  1. 在源服务器上:使用 mysqldump导出数据库为 SQL 文件。

    bash

    mysqldump -u dbuser -p'dbpass' --single-transaction --routines --triggers dbname > /backup/db_$(date +%F).sql

  2. 使用 rsync 同步:将生成的 SQL 备份文件同步到备份服务器。

    bash

    rsync -avz /backup/db_*.sql backupuser@BACKUP_SERVER_IP:/backup/database/


✅ 关键注意事项

  1. 先测试,再同步:始终先用 --dry-run和少量数据测试命令,特别是使用 --delete参数时,避免误删数据。

  2. 保护敏感信息:妥善保管 SSH 私钥和 rsync 密码文件,权限设为 600

  3. 保留历史版本rsync --delete是镜像备份。如需保留历史版本,可结合 cp -alrsync--link-dest参数实现快照式备份,或定期将备份目录打包归档。

  4. 监控与告警:检查 cron任务的执行日志,确保备份成功。可设置脚本在失败时通过邮件等方式告警。

说明:本文参考https://www.zhujipingjia.com/rsync.html及AI辅助完成。