Restic + systemd Timer + OSS 做数据库备份指南

在资源有限的情况下,很多开发者通常是单机服务器,那么如何做数据备份就成了一个问题。 数据库备份看起来是一件简单的事情:定时导出数据库,将备份文件上传到对象存储,需要时再下载恢复。 但真正放到生产环境中,会遇到不少问题: 数据库正在写入,直接复制数据文件是否会产生不一致? 数据库备份文件越来越大,如何减少存储空间和上传流量? 服务器意外关机,错过的定时任务能否自动补执行? 备份文件存放在 OSS 或 R2 中,如何保证数据安全? 备份任务显示成功,是否意味着数据库真的可以恢复? 本文介绍一套基于 Restic + systemd Timer + 对象存储 的自动化数据库备份方案。 数据库以 PostgreSQL、MySQL 和 Redis 为例,远程存储分别使用 Cloudflare R2 和阿里云 OSS。通过数据库原生工具生成备份文件,再交给 Restic 进行加密、去重和快照管理,最后利用 systemd Timer 定时执行。 这套方案适合单机或少量 Linux 服务器上的数据库备份,也可以作为进一步建设企业备份体系的基础。 一、整体架构与技术选型 1.1 整体架构 整个备份流程分为四个部分: 数据库备份:使用数据库原生工具生成一致性备份文件。 本地暂存:将备份文件写入本地临时目录,并进行完整性检查。 Restic 备份:对备份文件进行加密、数据去重和 Snapshot 管理。 对象存储:将 Restic 仓库保存到 Cloudflare R2 或阿里云 OSS。 整体架构如下: systemd Timer | v 数据库备份脚本 | +------------+------------+ | | | v v v PostgreSQL MySQL Redis pg_dump mysqldump BGSAVE | | | +------------+------------+ | v 本地备份目录 | v Restic +--------+--------+ | | v v Cloudflare R2 阿里云 OSS Restic 仓库 Restic 仓库 这里需要特别说明:Restic 不是数据库备份工具,而是负责备份文件的存储和生命周期管理。...

2025年11月07日 · 10 min · Leanku