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

esyap4oy  于 2022-12-17  发布在  Mysql
关注(0)|答案(3)|浏览(135)

提前问候和感谢,我实际上是新的 Docker 和 Docker 组成,看了很多视频和阅读了很多文章,到目前为止,沿着尝试的东西。
我有一个前端容器和一个后端容器,它们作为一个Dockerfile单独构建和运行,并在一个Docker-compose设置中运行。
(我一直在先用Dockerfile构建,然后将容器集成到docker-compose中,以确保我正确理解了内容)
我现在需要我的数据库信息,因为我将使用docker-compose,据我所知,它应该建立在同一个网络下,有一个react前端和django后端。
我有一个备份的mysql转储文件,我认为我需要做的是有一个容器运行mysql服务器和服务出我的表(就像我有它在本地工作)。我还没有能够弄清楚如何导入备份到我的docker mysql容器。
任何帮助都很感激。
到目前为止,我所尝试的是在命令行中使用docker来概述我在Docker文件中需要的片段,然后将什么移动到docker中-如上所述组成:

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

然后,我尝试了一系列命令和命令排列,最近在CLI中,下面是我最近的一些尝试和错误:
docker exec -i根目录mysql -uroot -根目录--force〈/用户/homeImac/下载/转储-dev-2020-11-10-22-43-06.dmp
第22行出现错误1046(3D 000):未选择数据库
docker exec -i f803170 ce 38 b sh -c '执行mysql -uroot -p“根目录”'〈/用户/homeImac/下载/转储-dev-2020-11-10-22-43-06.dmp
第22行出现错误1046(3D 000):未选择数据库
docker exec -i f803170 ce 38 b sh -c 'exec mysql -uroot -h 192.168.1.51-p“根目录”'〈/用户/homeImac/下载/转储-开发-2020-11-10-22-43-06.dmp
错误1045(28000):拒绝用户'root'@'homeimac'的访问(使用密码:是)
到目前为止,我已经浏览了整个网页,我不知道下一步该怎么做,我的想法对吗?如果有人有一个如何导入数据库转储的例子(在dmp或dmp.gz中),一旦我开始工作,我实际上会在docker-compose文件中这样做。
考虑到这一点,我只需要创建容器和导入,所以我可能甚至不需要一个Dockerfile。当我到达那里时,我会跨过这座桥。这是我的想法:

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

等等等等
我学得很快,也许太快了。谢谢你的建议!

pdtvr36n

pdtvr36n1#

docker hub page of MySQL中给出了您问题的答案。

初始化新示例

第一次启动container时,将创建一个具有指定名称的新数据库,并使用提供的配置变量进行初始化。此外,它将执行扩展名为.sh的文件。.sql和. sql.gz,它们位于/docker-entrypoint-〉initdb. d中。文件将按字母顺序执行。通过将SQL转储装入该目录并提供包含贡献数据的自定义映像,可以轻松地填充mysql服务。默认情况下,SQL文件将导入MYSQL_DATABASE变量指定的数据库。
在您的docker-compose.yml中用途:

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

就是这样。

a64a0gku

a64a0gku2#

以下是我与2位更了解我工作的后端的同事合作后得出的答案。
其实很简单,我在我的repo中创建了一个空目录,我在.gitignore中添加了 *.sql和 *.dmp,这样转储文件就不会增加映像的大小。
使用docker-compose的目录将被用作mysql服务下的卷:

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

转储文件放置在那里,并在我运行以下命令时导入SQL服务:

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

我可以使用docker exec进入并验证不仅数据库在那里,而且转储文件中的表也在那里。
对我来说,我必须通过Django应用程序在我的后端容器中创建一个新的超级用户。

python3 manage.py createsuperuser

这样,然后登录localhost:8000/API,mysql、后端和前端容器之间的一切都被连接起来了。
希望这能有所帮助!我确信其他的邮件卷的细节是不一样的,但是使用卷,我不需要复制任何转储文件,它最终会自动导入和服务。这是我的大问题。

vaqhlq81

vaqhlq813#

另一种方式:

docker exec -i containername mysql -uroot -ppassword mysql < dump.sql

从dump.sql所在的文件夹

相关问题