[英]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
)?
通过docker volume ls
你可以找到卷的名称。 假设它是<abcdef>
。
然后,通过docker run -it --rm -v <abcdef>:/var/lib/mysql busybox ls -l /var/lib/mysql
确保您看到文件并且文件的日期与您最近对丢失数据库。 (此答案的学分)
或者,您可以通过此方法创建此卷的备份。
无论您已经使用什么docker run
命令来启动 MySQL 容器,添加-v <abcdef>:/var/lib/mysql_old
到它。 它应该为您提供一个全新的 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.