如果我有一个data.sql,如何将数据库导入我的mysql docker容器?我如何导入数据库数据.在码头世界中,这增加了一层复杂性.请问一些方法.
在这里我的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"
Run Code Online (Sandbox Code Playgroud)
Lau*_*uri 119
您可以在以后导入数据库:
docker exec -i mysql-container mysql -uuser -ppassword name_db < data.sql
Eug*_*yer 67
/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
Run Code Online (Sandbox Code Playgroud)
这将在容器启动期间触发sql-dump的导入,请参阅 "初始化新实例"下的https://hub.docker.com/_/mysql/
Han*_*rus 40
我似乎无法使用最新的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:
Run Code Online (Sandbox Code Playgroud)
Exc*_*nmi 22
如果您不想安装卷,但想从本地计算机转储文件,则另一个选项是管道cat yourdump.sql.像这样:
cat dump.sql | docker exec -i mysql-container mysql -uuser -ppassword db_name
Run Code Online (Sandbox Code Playgroud)
请参阅:https: //gist.github.com/spalladino/6d981f7b33f6e0afe6bb
使用docker-compose导入
cat dump.sql | docker-compose exec -T <mysql_container> mysql -u <db-username> -p<db-password> <db-name>
Run Code Online (Sandbox Code Playgroud)
先做docker cp file.sql <CONTAINER NAME>:/file.sql
然后docker exec -it <CONTAINER NAME> mysql -u user -p
然后在mysql容器内执行source \file.sql
小智 8
结合/sf/answers/3628651351/ 和这个问题的答案,我认为最好的答案是:
cat {SQL FILE NAME} | docker exec -i {MYSQL CONTAINER NAME} {MYSQL PATH IN CONTAINER} --init-command="SET autocommit=0;"
Run Code Online (Sandbox Code Playgroud)
例如,在我的系统中,此命令应如下所示:
cat temp.sql | docker exec -i mysql.master /bin/mysql --init-command="SET autocommit=0;"
Run Code Online (Sandbox Code Playgroud)
您也可以使用pv来监控进度:
cat temp.sql | pv | docker exec -i mysql.master /bin/mysql --init-command="SET autocommit=0;"
Run Code Online (Sandbox Code Playgroud)
这里最重要的是“--init-command”,它可以将导入进度加快 10 倍。
只需编写docker ps并获取容器 ID,然后编写以下内容;
docker exec -i your_container_id mysql -u root -p123456 your_db_name < /Users/your_pc/your_project_folder/backup.sql
Run Code Online (Sandbox Code Playgroud)
小智 7
我可以用这个命令导入
docker-compose exec -T mysql mysql -uroot -proot mydatabase < ~/Desktop/mydatabase_2019-10-05.sql
Run Code Online (Sandbox Code Playgroud)
您可以按照以下简单步骤操作:
第一种方式:
首先将 SQL 转储文件从本地目录复制到 mysql 容器。使用 docker cp 命令
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
Run Code Online (Sandbox Code Playgroud)
然后使用执行 mysql-container (注意:如果您使用的是 alpine 版本,则需要在下面给出的命令中将 bash 替换为 sh 。)
docker exec -it -u root mysql-container bash
Run Code Online (Sandbox Code Playgroud)
然后你可以简单地导入这个 SQL 转储文件。
mysql [DB_NAME] < [SQL dump file path]
mysql movie_db < /home/data.sql
Run Code Online (Sandbox Code Playgroud)
第二种方式:简单
docker cp ./data.sql mysql-container:/docker-entrypoint-initdb.d/
Run Code Online (Sandbox Code Playgroud)
正如 mysql Docker hub 官方页面中提到的。
每当容器第一次启动时,都会使用 MYSQL_DATABASE 变量中指定的名称创建一个新数据库 - 您可以通过设置环境变量来传递该数据库,请参阅此处如何设置环境变量
默认情况下,容器将执行在 /docker-entrypoint-initdb.d 文件夹中找到的扩展名为 .sh、.sql 和 .sql.gz 的文件。文件将按字母顺序执行。这样,您的 SQL 文件将默认导入到 MYSQL_DATABASE 变量指定的数据库中。
欲了解更多详情,您可以随时访问官方页面
小智 6
尝试"docker exec ... < data.sql"在 Window PowerShell 响应中使用:
“<”运算符保留供将来使用。
但我们可以用以下方法cmd /c解决这个问题:
cmd /c "docker exec -i mysql-container mysql -uuser -ppassword name_db < data.sql"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
82593 次 |
| 最近记录: |