你们在备份数据时会暂停服务以保持数据的一致性吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
cnt2ex
V2EX    程序员

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

  •  
  •   cnt2ex 53 天前 3312 次点击
    这是一个创建于 53 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    15 条回复    2025-08-20 11:17:37 +08:00
    kuanat
        1
    kuanat  
       53 天前
    我的话一般会停止服务,不过这个行为取决于备份粒度。一般来说我不会把很多服务的数据放在一起备份,而是单独处理。

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

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

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

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

    还有一次他要还原备份数据,死活发现还原的数据不完整,原来是之前备份和一些日志数据把服务器磁盘干满了,日志是每小时定时清理,备份是保留 7 天的,导致每天都是备份的数据不完全,要去提以前备份的数据结果发现 7 天内的都不完整
    guanyujia5444
        12
    guanyujia5444  
       52 天前
    这得看备份方式,数据库支持热备份,使用热备份导出一份一致的。或者使用云服务器快照实现。但用文件同步肯定是不行的,数据库文件的文件头都不一致,没办法恢复的。
    mmdsun
        13
    mmdsun  
       52 天前 via iPhone
    数据库文件不行,正在运行拷过去可能无法启动了。
    yoggg
        14
    yoggg  
       52 天前
    我之前在某大厂 PG 自研项目备份组干过,业界大部分 DB 备份方案都了解过,可以告诉你,当然不会暂停,不然卖给谁……甚至升级期间都能支持,为了适配这些奇葩场景,我吃过的苦狗听到了都得哭两声。
    Kirkcong
        15
    Kirkcong  
       52 天前
    数据库直接 dump 成 sql 文件不就完了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5587 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 07:51 PVG 15:51 LAX 00:51 JFK 03:51
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86