一、事情起因
今天想随便找个Mysql数据库,测试一下间隙锁,然后就想到了我尘封已久的一个服务器。
进去之后,发现有个mysql,但是忘记密码了,想着估计也没啥用,直接反手来了个docker rm -f
删完想起来了,有个项目用到了这个数据库,还以为项目好久没人用了,结果一问:天天用。直接脑瓜子嗡嗡的~
再确认一下,是真没了
但是,先别慌,还能抢救
二、数据恢复
2.1、第一步:找到删除容器对应的volumes
bash
# 先进入到docker存储数据卷的目录下
cd /var/lib/docker/volumes/
# 查看数据卷有哪些
ll
有这么多,该怎么确定哪个是的呢?
由于我这个是mysql数据库,在mysql数据库的容器volumes中会有一个mysql.ibd的文件,所以,直接find查一下,筛选出来mysql
bash
find . -name mysql.ibd
找到了3个mysql相关的,根据创建时间,以及cd进去,里面可以看到数据库的名字,从而确定了这个volumn
2.2、第二步:基于一样的镜像启动新的容器
根据原数据库一样的镜像,重新启动一个新的容器
bash
docker run -itd -p 3306:3306 -e MYSQL_ROOT_PASSWORD=xxxxxx mysql:8.0
2.3、第三步:将之前的volumes迁移/挂载到新的容器上
查看新容器的volumn名
bash
docker inspect 新容器名
关闭新的容器
bash
docker stop 新容器名
将新容器的volumn替换为第一步找到的volumn
bash
# 先进入到docker存储数据卷的目录下
cd /var/lib/docker/volumes/
# 删除新容器的volumn
rm -rf 新容器volumn名
# cp第一步找到的volumn到新容器volumn
cp -r 第一步找到的volumn名 新容器volumn名
启动新容器
bash
docker start 新容器名
至此,大功告成!