关于数据库快照, 有没有必要停机保证数据一致性? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
kyonn
V2EX    数据库

关于数据库快照, 有没有必要停机保证数据一致性?

  •  
  •   kyonn 2023-10-05 10:55:48 +08:00 2091 次点击
    这是一个创建于 816 天前的主题,其中的信息可能已经有所发展或是发生改变。

    NAS 用的 btrfs 快照功能, 需要定期备份 docker 挂载的 volume, 其中一部分 docker 用了数据库, 快照这部分数据时是否需要先停止服务(docker)?

    根据 COW 的原理, 快照是能保证快照瞬间数据一致性的, 但是对于数据库来说, 它的数据一致性没办法保证. 但数据库本身有事务机制, 是否可以保证从任意一个快照状态下恢复? 顶多丢失最近操作数据?

    网上看到各种做法都有, 有直接快照的, 有用命令冻结数据库再快照的, 有用数据库原生命令导出数据库文件再快照的.

    以上都是猜测, 有没有对数据库比较熟悉的人提供下建议.

    8 条回复    2023-10-06 16:25:06 +08:00
    loading
        1
    loading  
       2023-10-05 11:09:29 +08:00
    看你强迫症在哪一边了,你 NAS 的数据库就每秒都在写导致数据库都没空给你写到硬盘?还是数据库服务一下都不能停?

    定时到晚上备份,停几个小时都没事吧。

    生产服务器就不用管这些了。
    kyonn
        2
    kyonn  
    OP
       2023-10-05 11:13:33 +08:00
    @loading 只是请教下各种方法下的优劣势, 实际使用可以停机的. 比较关心 快照正在使用(正在向硬盘写数据)的数据库, 然后再用这份快照恢复会怎么样. 个人样本比较少, 不太容易测试得到可靠的结论.
    seers
        3
    seers  
       2023-10-05 11:22:20 +08:00 via Android
    你多虑了,还原备份时候会用日志前滚到最新状态的,所以备份时候停不停都无所谓
    mikewang
        4
    mikewang  
       2023-10-05 12:31:14 +08:00
    其实不仅是数据库,其他正在进行中的程序也有类似问题:因为 Btrfs / ZFS 等文件系统快照一般只对写到磁盘的文件做快照,而不去管内存的数据。
    恢复到某个快照,相当于快照时间强制断电时的状态(丢失了内存数据)。对于数据库来说,就当作异常断电恢复时的场景处理就行了。
    mikewang
        5
    mikewang  
       2023-10-05 12:42:01 +08:00
    这里补充一篇文章,挺有意思的:
    《崩溃一致性:你的程序真的正确保存了数据吗?》 https://zhuanlan.zhihu.com/p/2518892
    kyonn
        6
    kyonn  
    OP
       2023-10-05 16:00:52 +08:00
    @mikewang 是的, 我认为核心问题其实在 ext4 的 data=journal, writeback 设计里就已经涉及了, 无非是 btrfs 的文件系统具体实现机制不同. 拜读了下提到的文章, 还真挺有意思, 原来也不是所有数据库都能处理崩溃一致性.


    *其实我想问的问题本质上应该就是数据库软件能否正确处理崩溃一致性问题. *系统中其他的程序大部分只是写个日志, 损坏关系也不大. 提这个问题的原因是我把数据库相关的目录都关闭了 COW 属性, 如果不考虑碎片直接基于 btrfs 做快照, 会比 ext4 data=order 挂载安全, 因为 metadata 和 data 都有"日志", 虽然仍然保证不了崩溃瞬间业务的一致性.
    当然, 还一个问题就是提到的内存数据没有刷回硬盘, 甚至硬盘缓存没有刷回存储介质.
    kyonn
        7
    kyonn  
    OP
       2023-10-05 16:02:34 +08:00
    @seers 是的, 其实我想问的就是这个回滚靠不靠谱.
    julyclyde
        8
    julyclyde  
       2023-10-06 16:25:06 +08:00
    innodb 的话,对这事倒是要求不太高
    重新打开这个“半死”文件的时候,会执行 recovery 吧
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2923 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 13:58 PVG 21:58 LAX 05:58 JFK 08:58
    Do have faith in what you're doing.
    ubao msn 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