docker-compose down 后 mysql 丢失部分数据, 数据也挂载到了宿主机 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
fzzff
V2EX    程序员

docker-compose down 后 mysql 丢失部分数据, 数据也挂载到了宿主机

  •  
  •   fzzff 2022-07-25 11:43:39 +08:00 3117 次点击
    这是一个创建于 1223 天前的主题,其中的信息可能已经有所发展或是发生改变。
     mysql: image: mysql:8.0 container_name: ai_butler_dev_mysql volumes: - ./mysql/data:/var/lib/mysql - ./mysql/my.cnf:/etc/my.cnf ports: - "3308:3306" 

    docker-compose 配置如上, 先执行了 docker-compose down, 然后执行了 docker-compose up -d 后发现数据库内部分数据丢失, 应该如何排查和找回数据

    14 条回复    2022-08-05 11:22:54 +08:00
    ksc010
        1
    ksc010  
       2022-07-25 12:08:39 +08:00
    丢失的哪部分数据
    占比多少?是刚插入的,还是老的数据?

    理论上 关闭 mysql 时,即使是在内存的中的数据,也会保存到硬盘才会关闭。除非开启了事务,并且没有提交
    tpxcer
        2
    tpxcer  
       2022-07-25 12:29:51 +08:00
    关的时候丢失感觉能理解?
    hefish
        3
    hefish  
       2022-07-25 12:31:25 +08:00
    说不定是哪儿给误删了。。。
    novolunt
        4
    novolunt  
       2022-07-25 12:51:48 +08:00
    @ksc010 他这个是删除 docker 的容器不是关闭进程,根本没给你写到硬盘的机会
    novolunt
        5
    novolunt  
       2022-07-25 12:55:37 +08:00
    ```
    version: "3"
    pre-up: "./pre-up.sh"
    post-down: "./post-down.sh"
    services:
    service1:
    build: .
    volumes:
    - "/tmp/data-var:/var/data"
    ```
    novolunt
        6
    novolunt  
       2022-07-25 12:59:52 +08:00
    这里有相关的问题的解答,一般数据库不建议使用容器,停止容器的钩子,目前只有 k8s 支持
    https://github.com/docker/compose/issues/6736
    rekulas
        7
    rekulas  
       2022-07-25 13:03:53 +08:00
    据说通过挂载数据目录使用 mysql 存在一定的 io 风险,故障情况下会增加数据损坏的风险,建议 mysql 宿主机运行好点

    不过我看 mysql 官方好像也没对 docker 运行有过风险提醒,反而热衷于 docker 测试想让大家明白 docker 跑起来速度还是挺不错的。。
    rekulas
        8
    rekulas  
       2022-07-25 13:06:32 +08:00
    不过你这个还不算故障情况,应该是强关造成的,建议写个脚本关闭,先通过容器优雅停止 mysql ,再删除容器
    defunct9
        9
    defunct9  
       2022-07-25 13:09:57 +08:00   2
    开 ssh ,让我上去看看
    ksc010
        10
    ksc010  
       2022-07-25 13:17:40 +08:00
    @novolunt docker-compose down 也是先 stop 再 remove

    强制杀死 是 docker compose kill
    ql562482472
        11
    ql562482472  
       2022-07-25 13:19:59 +08:00
    docker stop 是发了信号给容器进程的 如果有 shutdownhook 应该是可以被调用的。
    这里要注意的几个点,
    1 是要使用官方 mysql 镜像,确保容器进程是 mysql
    2 是要留足 stop 的 timeout ,这既通过改 timeout ,也可以通过在在容器中执行 mysql 的停机再去停止容器,这样看来,在容器中停止 mysql 后再停止容器是更安全的
    ccccccccw
        12
    ccccccccw  
       2022-07-25 13:37:27 +08:00
    我之前也出现了这种问题,t/864723 ,postgresql 的,也不知道是什么原因造成的
    Nitroethane
        13
    Nitroethane  
       2022-07-25 14:36:43 +08:00 via iPhone
    @ql562482472 赞同 11 楼回复,docker 停止容器的时候先是发送 sigterm 信号,经过固定的时间后如果进程还没退出,就直接用 sigkill 干掉
    table cellpadding="0" cellspacing="0" border="0" width="100%"> fzzff
        14
    fzzff  
    OP
       2022-08-05 11:22:54 +08:00
    更新下, 最终找到了数据丢失的原因, 比较奇葩...项目本身在 /home/srv 下但是有其他同事将项目整体移动到了 /data/home/srv 下, 但是此时运行中的容器挂载的目录绝对路径还是 /home/srv, 所以在同事移动项目到 down 容器之间的时间修改添加的数据都被放到了 /home/srv/mysql 里, 然后我在 /data/home/srv 目录下 up 就造成了数据丢失的假象..
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2552 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 15:05 PVG 23:05 LAX 07:05 JFK 10:05
    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