docker rm -f 删库?先别跑,还有救!

戳上方蓝字“Java面试题精选”关注!

一、事情起因

今天想随便找个Mysql数据库,测试一下间隙锁,然后就想到了我尘封已久的一个服务器。

进去之后,发现有个mysql,但是忘记密码了,想着估计也没啥用,直接反手来了个docker rm -f

docker rm -f 删库?先别跑,还有救!

删完想起来了,有个项目用到了这个数据库,还以为项目好久没人用了,结果一问:天天用。直接脑瓜子嗡嗡的~

docker rm -f 删库?先别跑,还有救!

再确认一下,是真没了

docker rm -f 删库?先别跑,还有救!

但是,先别慌,还能抢救

二、数据恢复

2.1、第一步:找到删除容器对应的volumes

# 先进入到docker存储数据卷的目录下
cd /var/lib/docker/volumes/
# 查看数据卷有哪些
ll
docker rm -f 删库?先别跑,还有救!

有这么多,该怎么确定哪个是的呢?

由于我这个是mysql数据库,在mysql数据库的容器volumes中会有一个mysql.ibd的文件,所以,直接find查一下,筛选出来mysql

find . -name mysql.ibd
docker rm -f 删库?先别跑,还有救!

找到了3个mysql相关的,根据创建时间,以及cd进去,里面可以看到数据库的名字,从而确定了这个volumn

2.2、第二步:基于一样的镜像启动新的容器

根据原数据库一样的镜像,重新启动一个新的容器

docker run -itd -p 3306:3306 -e MYSQL_ROOT_PASSWORD=xxxxxx mysql:8.0

2.3、第三步:将之前的volumes迁移/挂载到新的容器上

查看新容器的volumn名

docker inspect 新容器名
docker rm -f 删库?先别跑,还有救!

关闭新的容器

docker stop 新容器名

将新容器的volumn替换为第一步找到的volumn

# 先进入到docker存储数据卷的目录下
cd /var/lib/docker/volumes/
# 删除新容器的volumn
rm -rf 新容器volumn名
# cp第一步找到的volumn到新容器volumn
cp -r 第一步找到的volumn名 新容器volumn名

启动新容器

docker start 新容器名

至此,大功告成!

来源:juejin.cn/post/7303785504004030515

后端专属技术群

构建高质量的技术交流社群,欢迎从事编程开发、技术招聘HR进群,也欢迎大家分享自己公司的内推信息,相互帮助,一起进步!

文明发言,以交流技术职位内推行业探讨为主

广告人士勿入,切勿轻信私聊,防止被骗

docker rm -f 删库?先别跑,还有救!

加我好友,拉你进群

docker rm -f 删库?先别跑,还有救!

原文始发于微信公众号(Java面试题精选):docker rm -f 删库?先别跑,还有救!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/275819.html

(0)
Java知音的头像Java知音bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!