记一次误操作删除了 mysql 容器以及后续的补救措施
起因
前几天想配置一下 mysql 容器的载挂目录,查了下资料后也照着做了,删除容器,运行容器,一切就这么自然而然,唯独没有备份数据。直到两天后我登不上图床那一刻我才发现数据库没了!
补救
先看看 issues 有没有类似情况的,哦没有
找一下掘金上的文章,和我的情况大抵相同,也是删除了容器,尝试了下,找到了被我的删除的数据卷:
1 | cd /var/lib/docker/volumes |
寻找和删除时间相似且大小比较大的数据卷:
最后锁定了 af5 开头的,后面照着操作新建一个目录,创建一个容器并载挂新建目录上,再将 sf5 开头的数据卷复制到新建目录上:
1 | cp -r /var/lib/docker/volumes/af50bb0f2381c8051c125b0510f78a34fe2d60fa3d5a1e718f400a213c31a66b/_data/* ./ |
复制的时候一直提示覆盖,需要临时禁用别名:
1 | unalias cp |
最后用 docker exec -it xxx /bin/bash
命令进到容器,连接 mysql 后能找到 lsky
数据库,就是 show tables;
的时候提示没有权限。
用命令 chown -R mysql:mysql /var/lin/mysql
加了权限后,查询数据时提示说表不存在:
后来我想到是不是应该将数据卷的拥有者和组一起复制进新建目录的,毕竟网上说改成 mysql
可能过时了,我也是兜兜转转了好久才明白权限的问题:
1 | cp -rp /var/lib/docker/volumes/af50bb0f2381c8051c125b0510f78a34fe2d60fa3d5a1e718f400a213c31a66b/_data/* ./ |
-p
选项是除复制文件的内容外,还把修改时间和访问权限也复制到新文件中。
最后查询数据成功:
用 navicat 导出了表结构和数据,重新导入了最新创建的 mysql,登录图床成功:
总结
删除容器前请再好好想想,有没有较为重要的数据没有备份好,特别是数据库方面的,一定要做好备份,毕竟数据无价。
您好~我是腾讯云开发者社区运营,关注了您分享的技术文章,觉得内容很棒,我们诚挚邀请您加入腾讯云自媒体分享计划。完整福利和申请地址请见:https://cloud.tencent.com/developer/support-plan
作者申请此计划后将作者的文章进行搬迁同步到社区的专栏下,你只需要简单填写一下表单申请即可,我们会给作者提供包括流量、云服务器等,另外还有些周边礼物。