繁体   English   中英

如何将 mysql 转储文件导入 Docker mysql 容器

[英]How to import a mysql dump file into a Docker mysql container

问候并提前致谢,我实际上是 docker 和 docker-compose 的新手,到目前为止,我观看了很多视频并阅读了很多文章并尝试了一些东西。

我有一个前端容器和一个后端容器,它们作为 Dockerfile 和 docker-compose 设置单独构建和运行。

(我一直在使用 Dockerfile 构建,然后将容器集成到 docker-compose 以确保我理解正确)

我现在需要我的数据库信息,因为我将使用 docker-compose,据我了解,它应该在具有反应前端和 django 后端的同一网络下构建。

我有一个正在使用的备份 mysql 转储文件,我认为我需要做的是让一个容器运行 mysql 服务器并提供我的表(就像我在本地工作一样)。 我无法弄清楚如何将备份导入到我的 docker mysql 容器中。

任何帮助表示赞赏。

到目前为止,我尝试的是在命令行中使用 docker 来概述我在 Dockerfile 中需要的部分,然后如上所述移动到 docker-compose 中的内容:

docker run -d --name root -e MYSQL_ROOT_PASSWORD=root mysql # to create my db container

然后我尝试了一堆命令和命令排列,最近在 CLI 中,这是我最近的一些试验和错误:

docker exec -i root mysql -uroot -proot --force < /Users/homeImac/Downloads/dump-dev-2020-11-10-22-43-06.dmp

第 22 行的错误 1046 (3D000):未选择数据库

docker exec -i f803170ce38b sh -c 'exec mysql -uroot -p“root”' < /Users/homeImac/Downloads/dump-dev-2020-061-10-22-dmp.4

第 22 行的错误 1046 (3D000):未选择数据库

docker exec -i f803170ce38b sh -c 'exec mysql -uroot -h 192.168.1.51 -p"root"' < /Users/homeImac/Downloads/dump-dev-2020-11-10-22-43-06.dmp

错误 1045 (28000): 用户 'root'@'homeimac' 的访问被拒绝(使用密码:是)

到目前为止,我已经搜索了 web,但我不确定接下来要去哪里 go,我有正确的想法吗? 如果有人有如何导入数据库转储(在 dmp 或 dmp.gz 中)的示例,一旦我开始工作,我实际上会在 docker-compose 文件中执行此操作。

考虑一下,我只需要创建容器并导入,所以我什至可能不需要 Dockerfile。 当我到达那里时,我会过那座桥。 这就是我的想法:

db:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_DATABASE: 'app'

等等等等

我学了很多东西超级快,也许太快了。 感谢您的任何提示!

您的问题的答案在 MySQL 的docker 中心页面中给出

初始化一个新实例

首次启动容器时,将使用提供的配置变量创建并初始化具有指定名称的新数据库。 此外,它将执行 /docker-entrypoint->initdb.d 中的 extensions.sh、.sql 和.sql.gz 文件。 文件将按字母顺序执行。 您可以通过将 SQL 转储安装到该目录中轻松填充 mysql 服务,并提供带有贡献数据的自定义图像。 SQL 文件将默认导入到 MYSQL_DATABASE 变量指定的数据库中。

在您的 docker-compose.yml 中使用:

volumes:
  - ${PWD}/config/start.sql:/docker-entrypoint-initdb.d/start.sql

就是这样。

在与 2 位更了解我工作的后端的同事合作后,这是对我有用的答案。

其实很简单。 我在我的仓库中创建了一个空目录。 我将 *.sql 和 *.dmp 添加到 my.gitignore,这样转储文件就不会增加我的图像大小。

该目录使用 docker-compose 将用作 mysql 服务下的卷:

volumes:
      - ~/workspace/app:/workspace/app

转储文件放置在那里,并在我运行时导入到 sql 服务中:

mysql -u app -papp app < /path/to/the/dumpfile

我可以 go 使用 docker exec 并验证不仅数据库在那里,而且我的转储文件中的表也在那里。

对我来说,我还必须通过我们的 Django 应用程序在我的后端容器中创建一个新的超级用户。

python3 manage.py createsuperuser

这样,然后登录 localhost:8000/api,一切都在 mysql、后端和前端容器之间连接起来。

希望这会有所帮助,我敢肯定,对于其他帖子卷,并非所有细节都相同,而是使用卷。 我不必复制任何转储文件,它最终会自动导入并提供服务。 那是我的大问题。

暂无
暂无

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

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