繁体   English   中英

从 Docker 卷恢复 mysql 数据

[英]Restoring mysql data from a Docker Volume

这是第二次当我的本地系统(Mac OS)崩溃并重新启动时,我失去了 MySQL 正在运行的 Docker 容器。 “输”是指即使docker ps -a也没有显示出来。 它消失了。

我正在使用官方 mysql-server docker 图像( https://hub.docker.com/r/mysql/mysql/lib/server )所以幸运的是/var/lib/mysql的数据量。 而且我很幸运,在容器丢失后,体积还在。

问题是,如何从/var/lib/mysql的 Docker 卷中恢复数据(例如mysqldump )?

第 1 步:查找并验证卷

通过docker volume ls你可以找到卷的名称。 假设它是<abcdef>

然后,通过docker run -it --rm -v <abcdef>:/var/lib/mysql busybox ls -l /var/lib/mysql确保您看到文件并且文件的日期与您最近对丢失数据库。 此答案的学分)

或者,您可以通过此方法创建此卷的备份。

第 2 步:创建一个新容器,并将此卷挂载到

无论您已经使用什么docker run命令来启动 MySQL 容器,添加-v <abcdef>:/var/lib/mysql_old到它。 它应该为您提供一个全新的 MySQL 容器并正常运行,没有任何问题。 您的数据还没有加载到那里,只有文件可以访问。

第 3 步:复制并覆盖 MySQL 数据

Now, go into the shell of that container (eg docker exec -it <CONTAINER_NAME> bash ) and do ls /var/lib/mysql_old to make sure the files from your volume are there.

然后,执行cp -R /var/lib/mysql_old/. /var/lib/mysql cp -R /var/lib/mysql_old/. /var/lib/mysql (或sudo cp...取决于您使用的用户),然后chown -R mysql:mysql /var/lib/mysql 本教程的功劳)

第四步:重启容器

退出容器并执行docker stop <CONTAINER_NAME>以停止容器。 然后通过docker start <CONTAINER_NAME>再次启动它。 瞧。 它现在应该是一个包含所有数据的数据库。

或者,如果您想从非黑客容器开始,您可以执行docker exec <CONTAINER_NAME> sh -c 'exec mysqldump -uroot -p --databases <DATABASE_NAME>' > dump.sql以获取 mysqldump it, and import that dump.sql into a fresh new container via docker exec -i <CONTAINER_NAME> sh -c 'exec mysql ' < dump.sql .

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM