导入 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
Import data.sql MySQL Docker Container
提问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.yaml
code.
我似乎无法使用最新的 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.sql
utilizing 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
回答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 的导出文件复制到容器中,然后导入数据库。如果您需要完整的说明,请告诉我,我会提供