你们在备份数据时会暂停服务以保持数据的一致性吗?

1 天前
 cnt2ex

比如一个自建云盘服务,有大量文件,除此之外还有 mariadb/postgresql 等数据库的各种文件。

如果在备份时,云盘正好在写入操作。这时候执行自动备份的脚本,很容易出现数据不一致的情况吧。

我想把云盘的 compose.yml 和所有 volumes 都给备份。这样在恢复时只需要下载所有数据,然后 docker compose up 就能恢复到原有的状态。但是为此必须要保持数据的一致性,每次备份时都得把服务给暂停再备份。但这样感觉当机太久了,特别是当文件数量很多的时候,即使是增量备份也会花上不少时间。

你们在备份时,会把服务停止之后再进行备份,还是不停止就备份呢?

2081 次点击
所在节点    程序员
14 条回复
kuanat
1 天前
我的话一般会停止服务,不过这个行为取决于备份粒度。一般来说我不会把很多服务的数据放在一起备份,而是单独处理。

从应用或者服务的层面看,大多数写入行为都是非同步的,像数据库一般会设计成 WAL 同步写,主库带缓冲的形式,暂停服务可以降低不一致的“来源”。

如果备份行为是复制,还要多考虑同一批文件由于备份这个行为的造成的时间差异,这也是不一致(匹配)的来源。如果是在 CoW 系统上,先创建快照,再将快照持久化备份会好一些。

当然这个事情还是看需求场景,只是一般来说,维护一个高可用系统的备份和恢复机制更麻烦一些,停止备份再恢复相对来说更容易自动化。
codehz
1 天前
数据库的话,想要不停机备份可以用官方提供的备份工具 Mariabackup 或者 pg_basebackup 这种,直接备份数据盘其实也没啥问题,数据丢失的范围仅限于正在运行的事务,要不然数据库干脆别干了
ryd994
1 天前
换一个思路:停止服务一秒,zfs/btrfs/Windows shadow copy 建一个镜像。然后就可以从镜像备份数据了
busier
1 天前
停机 btrfs 快照,在开机~~~~~
EyebrowsWhite
23 小时 18 分钟前
只有数据库这类的需要确保一致性吧,数据库比如 pg 支持用相关工具不停机备份,然后整体备份的时候忽略原本的数据库文件或者 volume ,只备份导出的文件即可
2liuqi
22 小时 11 分钟前
关闭服务写权限就好了
vczyh
20 小时 39 分钟前
我使用 zfs ,docker 的配置文件和服务的数据目录全部放在 zfs 中,备份时作快照
google2023
20 小时 35 分钟前
@ryd994 用 Veeam Backup & Replication ,这些工作它都自动完成了
ysicing
18 小时 40 分钟前
我个人服务直接用 restic 一梭子备份持久化目录,到目前为止还没遇到过啥问题
julyclyde
16 小时 42 分钟前
mariadb 就 mysql 嘛
那个可以用 percona xtrabackup 来做一致性备份的

pg 不太了解。应该也有吧
maocat
16 小时 32 分钟前
想起了上家我领导写的备份脚本,每天凌晨 3 点执行,实际没考虑服务器时区,中午 11 点开始备份,半个月服务都是卡顿的

还有一次他要还原备份数据,死活发现还原的数据不完整,原来是之前备份和一些日志数据把服务器磁盘干满了,日志是每小时定时清理,备份是保留 7 天的,导致每天都是备份的数据不完全,要去提以前备份的数据结果发现 7 天内的都不完整
guanyujia5444
16 小时 20 分钟前
这得看备份方式,数据库支持热备份,使用热备份导出一份一致的。或者使用云服务器快照实现。但用文件同步肯定是不行的,数据库文件的文件头都不一致,没办法恢复的。
mmdsun
8 小时 52 分钟前
数据库文件不行,正在运行拷过去可能无法启动了。
yaoh1024
3 小时 20 分钟前
我之前在某大厂 PG 自研项目备份组干过,业界大部分 DB 备份方案都了解过,可以告诉你,当然不会暂停,不然卖给谁……甚至升级期间都能支持,为了适配这些奇葩场景,我吃过的苦狗听到了都得哭两声。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/1153328

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX