比如一个自建云盘服务,有大量文件,除此之外还有 mariadb/postgresql 等数据库的各种文件。
如果在备份时,云盘正好在写入操作。这时候执行自动备份的脚本,很容易出现数据不一致的情况吧。
我想把云盘的 compose.yml 和所有 volumes 都给备份。这样在恢复时只需要下载所有数据,然后 docker compose up 就能恢复到原有的状态。但是为此必须要保持数据的一致性,每次备份时都得把服务给暂停再备份。但这样感觉当机太久了,特别是当文件数量很多的时候,即使是增量备份也会花上不少时间。
你们在备份时,会把服务停止之后再进行备份,还是不停止就备份呢?
![]() |
1
kuanat 19 小时 5 分钟前
我的话一般会停止服务,不过这个行为取决于备份粒度。一般来说我不会把很多服务的数据放在一起备份,而是单独处理。
从应用或者服务的层面看,大多数写入行为都是非同步的,像数据库一般会设计成 WAL 同步写,主库带缓冲的形式,暂停服务可以降低不一致的“来源”。 如果备份行为是复制,还要多考虑同一批文件由于备份这个行为的造成的时间差异,这也是不一致(匹配)的来源。如果是在 CoW 系统上,先创建快照,再将快照持久化备份会好一些。 当然这个事情还是看需求场景,只是一般来说,维护一个高可用系统的备份和恢复机制更麻烦一些,停止备份再恢复相对来说更容易自动化。 |
![]() |
2
codehz 18 小时 25 分钟前 via iPhone
数据库的话,想要不停机备份可以用官方提供的备份工具 Mariabackup 或者 pg_basebackup 这种,直接备份数据盘其实也没啥问题,数据丢失的范围仅限于正在运行的事务,要不然数据库干脆别干了
|
![]() |
3
ryd994 17 小时 18 分钟前 via Android
换一个思路:停止服务一秒,zfs/btrfs/Windows shadow copy 建一个镜像。然后就可以从镜像备份数据了
|
4
busier 17 小时 7 分钟前 via iPhone
停机 btrfs 快照,在开机~~~~~
|
![]() |
5
EyebrowsWhite 16 小时 13 分钟前 via iPhone
只有数据库这类的需要确保一致性吧,数据库比如 pg 支持用相关工具不停机备份,然后整体备份的时候忽略原本的数据库文件或者 volume ,只备份导出的文件即可
|
6
2liuqi 15 小时 7 分钟前 ![]() 关闭服务写权限就好了
|
![]() |
7
vczyh 13 小时 34 分钟前
我使用 zfs ,docker 的配置文件和服务的数据目录全部放在 zfs 中,备份时作快照
|
![]() |
8
google2023 13 小时 30 分钟前
@ryd994 用 Veeam Backup & Replication ,这些工作它都自动完成了
|
![]() |
9
ysicing 11 小时 36 分钟前
我个人服务直接用 restic 一梭子备份持久化目录,到目前为止还没遇到过啥问题
|
10
julyclyde 9 小时 38 分钟前
mariadb 就 mysql 嘛
那个可以用 percona xtrabackup 来做一致性备份的 pg 不太了解。应该也有吧 |
![]() |
11
maocat 9 小时 27 分钟前 via Android
想起了上家我领导写的备份脚本,每天凌晨 3 点执行,实际没考虑服务器时区,中午 11 点开始备份,半个月服务都是卡顿的
还有一次他要还原备份数据,死活发现还原的数据不完整,原来是之前备份和一些日志数据把服务器磁盘干满了,日志是每小时定时清理,备份是保留 7 天的,导致每天都是备份的数据不完全,要去提以前备份的数据结果发现 7 天内的都不完整 |
12
guanyujia5444 9 小时 15 分钟前
这得看备份方式,数据库支持热备份,使用热备份导出一份一致的。或者使用云服务器快照实现。但用文件同步肯定是不行的,数据库文件的文件头都不一致,没办法恢复的。
|
![]() |
13
mmdsun 1 小时 47 分钟前 via iPhone
数据库文件不行,正在运行拷过去可能无法启动了。
|