如何恢复docker容器数据
项⽬测试环境数据库数据丢失,特此记录⼀下。当时是⽤ docker 安装的,以为临时使⽤⼀段时间,也没有持久化。突然前天 docker ⽇志满了,同事想着去清理⽇志,使⽤了如下命令:
docker system prune
结果当时 MySQL 容器当时正常处于停⽌状态,结果容器⼀下⼦就被⼲掉了,我们备份的数据还是三⽉份的,这下糟糕了。然后各种研究开始恢复。
然后我就去官⽅⽂档去研究这个命令是⼲什么的,上⾯⽤到的docker system prune意思是:
Remove all unused containers, networks, images (both dangling and unreferenced), and optionally, volumes.
删除所有未使⽤的容器、⽹络、图像(悬空和未引⽤的图像)以及卷(可选)。
By default, volumes are not removed to prevent important data from being deleted if there is currently no container using the volume. Use the --volumes flag when running the command to prune volumes as well:
默认情况下,如果当前没有使⽤卷的容器,则不会删除卷以防⽌删除重要数据。运⾏命令时也可以使⽤--volumes标志来修剪卷:
container容器用法
这下⼼放下了⼀半,还好数据卷没有被删除,我们可以利⽤数据卷可以进⾏恢复数据。接下来记录下我的恢复⽅案吧。
1.查数据卷位置
数据卷⽬录在/var/lib/docker/volumes下,每个容器都会在该⽬录下有⼀个⽂件夹,如果容器还存在的话,我们可以使⽤docker inspect 容器ID去查看数据卷位置,这下容器被删除了,可怎么办,只能挨个去了,⼀般 MySQL 容器数据卷⽬录下会有⼀个_data⽬录,该⽬录下会显⽰你每个数据库的⽂件夹,最终到了。
这个cxhello就是我们的测试库,现在我们就可以恢复数据了。
2.恢复
使⽤docker volume create 数据卷名字命令新建⼀个数据卷,docker volume ls查看数据卷列表
注意:使⽤数据卷进⾏挂载的时候,数据卷必须是⼀个空的⽬录,也就是说不能有任何数据。
然后创建容器
docker run -d -p 3309:3306 -v mysqldata:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name huifu mysql:5.7
在恢复数据之前需要把刚刚建⽴的数据卷⾥⾯关联的内容删除掉,然后把之前的数据卷内容复制到现在的数据卷进⾏数据恢复。
cd /var/lib/docker/volumes/mysqldata/_data/
rm -f *
rm -f -R *
复制内容到数据卷
cd /var/lib/docker/volumes/1db16a9dfdf3442b117ebc2ec11df5df4db717cfd567c77fa0a49905a9652fa0/_data/
cp -R * /var/lib/docker/volumes/mysqldata/_data/
⾄此数据库数据恢复完成,进⼊恢复的容器查看
参考⽂章
到此这篇关于如何恢复docker容器数据的⽂章就介绍到这了,更多相关docker容器数据恢复内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。