导入 data.sql MySQL Docker 容器

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/43880026/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-31 22:20:03  来源:igfitidea点击:

Import data.sql MySQL Docker Container

mysqldocker

提问by Israel Morales

If I have a data.sql, how I can import database to my mysql docker container? How I can import database data. In a dockerised world this adds a layer of complexity. some methods please.

如果我有一个 data.sql,我如何将数据库导入我的 mysql docker 容器?如何导入数据库数据。在 dockerised 世界中,这增加了一层复杂性。请一些方法。

Here my docker-compose.yml:

这是我的 docker-compose.yml:

nginx:
  build: ./nginx/
  container_name: nginx-container
  ports:
    - 80:80
  links:
    - php
  volumes_from:
    - app-data

php:
  build: ./php/
  container_name: php-container
  expose:
    - 9000
  links:
    - mysql
  volumes_from:
    - app-data

app-data:
  image: php:7.0-fpm
  container_name: app-data-container
  volumes:
    - ./www/html/:/var/www/html/
  command: "true"

mysql:
  image: mysql:latest
  container_name: mysql-container
  ports:
    - 3306:3306
  volumes_from:
    - mysql-data
  environment:
    MYSQL_ROOT_PASSWORD: secret
    MYSQL_DATABASE: name_db
    MYSQL_USER: user
    MYSQL_PASSWORD: password

mysql-data:
  image: mysql:latest
  container_name: mysql-data-container
  volumes:
    - /var/lib/mysql
  command: "true"

采纳答案by Hana Alaydrus

I can't seem to make this work with the latest mysql or mysql:5.7. So I use mariaDB instead. Here is my docker-compose.yamlcode.

我似乎无法使用最新的 mysql 或 mysql:5.7 来完成这项工作。所以我改用 mariaDB。这是我的docker-compose.yaml代码。

version: '3'

services:
  mysql:
    image: mariadb:10.3
    container_name: mariadb
    volumes:
      - container-volume:/var/lib/mysql
      - ./dump.sql:/docker-entrypoint-initdb.d/dump.sql
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: name_db
    ports:
      - "3306:3306"

volumes:
  container-volume:

回答by Lauri

You can import database afterwards:

之后您可以导入数据库:

docker exec -i mysql-container mysql -uuser -ppassword name_db < data.sql

docker exec -i mysql-container mysql -uuser -ppassword name_db < data.sql

回答by Eugen Mayer

Mount your sql-dump under/docker-entrypoint-initdb.d/yourdump.sqlutilizing a volume mount

/docker-entrypoint-initdb.d/yourdump.sql使用卷挂载下挂载您的 sql-dump

mysql:
  image: mysql:latest
  container_name: mysql-container
  ports:
    - 3306:3306
  volumes:
    - ./dump.sql:/docker-entrypoint-initdb.d/dump.sql
  environment:
    MYSQL_ROOT_PASSWORD: secret
    MYSQL_DATABASE: name_db
    MYSQL_USER: user
    MYSQL_PASSWORD: password

This will trigger an import of the sql-dump during the start of the container, see https://hub.docker.com/_/mysql/under "Initializing a fresh instance"

这将在容器启动期间触发 sql-dump 的导入,请参阅 “初始化新实例”下的https://hub.docker.com/_/mysql/

回答by Excellence Ilesanmi

Another option if you don't wanna mount a volume, but wanna dump a file from your local machine, is to pipe cat yourdump.sql. Like so:

如果您不想挂载卷,但想从本地机器转储文件,另一种选择是管道cat yourdump.sql. 像这样:

cat dump.sql | docker exec -i mysql-container mysql -uuser -ppassword db_name

See: https://gist.github.com/spalladino/6d981f7b33f6e0afe6bb

见:https: //gist.github.com/spalladino/6d981f7b33f6e0afe6bb

回答by Slipstream

Import using docker-compose

使用docker-compose导入

cat dump.sql | docker-compose exec -T <mysql_container> mysql -u <db-username> -p<db-password> <db-name>

回答by Matt.Cai

combine https://stackoverflow.com/a/51837876/1078784and answers in this question, I think the best answer is:

结合https://stackoverflow.com/a/51837876/1078784和这个问题的答案,我认为最好的答案是:

cat {SQL FILE NAME} | docker exec -i {MYSQL CONTAINER NAME} {MYSQL PATH IN CONTAINER} --init-command="SET autocommit=0;"

for example in my system this command should look like:

例如,在我的系统中,此命令应如下所示:

cat temp.sql | docker exec -i mysql.master /bin/mysql --init-command="SET autocommit=0;"

also you can use pvto moniter progress:

您也可以使用pv来监控进度:

cat temp.sql | pv | docker exec -i mysql.master /bin/mysql --init-command="SET autocommit=0;"

And the most important thing here is "--init-command" which will speed up the import progress 10 times fast.

这里最重要的是“--init-command”,它可以将导入进度加快 10 倍。

回答by Caleb Santos

You can run a container setting a shared directory (-v volume), and then run bash in that container. After this, you can interactively use mysql-client to execute the .sql file, from inside the container. obs: /my-host-dir/shared-dir is the .sql location in the host system.

您可以运行设置共享目录(-v 卷)的容器,然后在该容器中运行 bash。在此之后,您可以交互地使用 mysql-client 从容器内部执行 .sql 文件。obs:/my-host-dir/shared-dir 是主机系统中的 .sql 位置。

docker run --detach --name=test-mysql -p host-port:container-port  --env="MYSQL_ROOT_PASSWORD=my-root-pswd" -v /my-host-dir/shared-dir:/container-dir mysql:latest


docker exec -it test-mysql bash

Inside the container...

容器内...

mysql -p < /container-dir/file.sql 

Custom parameters:

自定义参数:

  • test-mysql(container name)
  • host-portand container-port
  • my-root-pswd(mysql root password)
  • /my-host-dir/shared-dirand /container-dir(the host directory that will be mounted in the container, and the container location of the shared directory)
  • test-mysql(容器名称)
  • 主机端口容器端口
  • my-root-pswd(mysql 根密码)
  • /my-host-dir/shared-dir/container-dir(将挂载到容器中的主机目录,以及共享目录的容器位置)

回答by Son Goku

I can import with this command

我可以用这个命令导入

docker-compose exec -T mysql mysql -uroot -proot mydatabase < ~/Desktop/mydatabase_2019-10-05.sql

回答by Erenss

This one work for me

这个对我有用

$ docker exec -i NAME_CONTAINER_MYSQL mysql -u DB_USER -pPASSWORD DATABASE < /path/to/your/file.sql

$ docker exec -i NAME_CONTAINER_MYSQL mysql -u DB_USER -pPASSWORD DATABASE < /path/to/your/file.sql

First if do you want to know what is the NAME_CONTAINER_MYSQL, you should use this command below :

首先,如果您想知道 NAME_CONTAINER_MYSQL 是什么,您应该使用以下命令:

$ docker ps

$ docker ps

In the output column NAME you will see the NAME_CONTAINER_MYSQL that do you need to replace in the command above.

在输出列 NAME 中,您将看到需要在上面的命令中替换的 NAME_CONTAINER_MYSQL。

回答by Jarjob

you can copy the export file for e.g dump.sql using docker cp into the container and then import the db. if you need full instructions, let me know and I will provide

您可以使用 docker cp 将例如 dump.sql 的导出文件复制到容器中,然后导入数据库。如果您需要完整的说明,请告诉我,我会提供