导入 data.sql MySQL Docker 容器

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

这是我的码头作品:

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"
185619 次浏览

使用卷安装在 /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

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

以后可以导入数据库:

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

我似乎无法使用最新的 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:

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

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

参见: Https://gist.github.com/spalladino/6d981f7b33f6e0afe6bb

使用 码头作曲导入

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

您可以运行一个设置共享目录(- v 卷)的容器,然后在该容器中运行 bash。之后,可以交互式地使用 mysql-client 执行。Sql 文件,从容器内部。控件:/my-host-dir/share-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

在集装箱里..。

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

自定义参数:

  • Test-mysql (容器名)
  • 主机端口 货柜码头
  • My-root-pswd (mysql root 密码)
  • /my-host-dir/share-dir 容器/目录(将挂载到容器中的主机目录,以及共享目录的容器位置)

合并 < a href = “ https://stackoverflow. com/a/51837876/1078784”> 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;"

例如,在我的系统中,这个命令应该是这样的:

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

你也可以使用 电视来监控进度:

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

这里最重要的是“—— init-command”,它将使导入进程的速度提高10倍。

您可以使用 docker cp 将 dump p.sql 的导出文件复制到容器中,然后导入 db。如果你需要完整的指示,让我知道,我会提供

我可以用这个命令导入

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

这个对我有用

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

首先,如果您想知道什么是 NAME _ CONTAINER _ MYSQL,您应该使用 下面的命令:

$ docker ps

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

你可以按照以下简单的步骤:

第一种方式:

首先将 SQL 转储文件从本地目录复制到 mysql 容器

docker cp [SRC-Local path to sql file] [container-name or container-id]:[DEST-path to copy to]


docker cp ./data.sql mysql-container:/home

然后使用以下命令执行 mysql 容器(注意: 如果您使用的是 alpine 版本,那么您需要用 sh 替换 bash。)

docker exec -it -u root mysql-container bash

然后您可以简单地导入这个 SQL 转储文件。

mysql [DB_NAME] < [SQL dump file path]


mysql movie_db < /home/data.sql

第二种方法: 简单

docker cp ./data.sql mysql-container:/docker-entrypoint-initdb.d/

如 mysql Docker hub 官方页面所述。

每当一个容器第一次启动时,就会在 MYSQL _ dATABASE 变量中创建一个具有指定名称的新数据库——您可以通过设置环境变量 请看这里如何设置环境变量 来传递这个变量

默认情况下,容器将执行带扩展名的文件。嘘。Sql 和。在/docker-entrypoint-initdb 中找到的 sql.gz。D 文件夹。档案会以字母顺序执行。这样,默认情况下,SQL 文件将被导入到由 MYSQL _ DATABASE 变量指定的数据库中。

更多细节,您可以随时访问 官方页面

在 Window PowerShell 响应中尝试 "docker exec ... < data.sql":

“ <”运算符保留以备将来使用。

但我们可以用 cmd /c来解决这个问题:

cmd /c "docker exec -i mysql-container mysql -uuser -ppassword name_db < data.sql"

先做 docker cp file.sql <CONTAINER NAME>:/file.sql

然后是 docker exec -it <CONTAINER NAME> mysql -u user -p

然后在 mysql 容器内执行 source \file.sql

只需编写 docker ps并获取容器 ID,然后编写以下代码;

docker exec -i your_container_id mysql -u root -p123456 your_db_name < /Users/your_pc/your_project_folder/backup.sql