【问题标题】:Restoring mysql data from a Docker Volume从 Docker 卷恢复 mysql 数据
【发布时间】:2021-08-21 22:42:55
【问题描述】:

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

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

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

【问题讨论】:

    标签: mysql docker docker-volume


    【解决方案1】:

    第 1 步:查找并验证卷

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

    然后,通过docker run -it --rm -v <abcdef>:/var/lib/mysql busybox ls -l /var/lib/mysql 确保您看到文件并且文件的日期与您最近对丢失的数据库所做的更改相匹配。 (感谢this answer

    或者,您可以通过this method从此卷创建备份。

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

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

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

    现在,进入该容器的外壳(例如docker exec -it <CONTAINER_NAME> bash)并执行ls /var/lib/mysql_old 以确保您的卷中的文件在那里。

    然后,执行cp -R /var/lib/mysql_old/. /var/lib/mysql(或sudo cp ...,具体取决于您使用的用户),然后执行chown -R mysql:mysql /var/lib/mysql。 (感谢this tutorial

    第四步:重启容器

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

    或者,如果您想从非黑客容器开始,您可以使用docker exec <CONTAINER_NAME> sh -c 'exec mysqldump -uroot -p --databases <DATABASE_NAME>' > dump.sql 从中获取 mysqldump,然后通过 docker exec -i <CONTAINER_NAME> sh -c 'exec mysql ' < dump.sqldump.sql 导入到新容器中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-15
      • 2018-10-26
      • 1970-01-01
      • 2020-04-08
      • 2019-05-06
      • 2019-02-15
      • 2013-02-24
      相关资源
      最近更新 更多