如何在我的 MySQL-Docker 容器中导入现有的 MySQL 数据库?

ban*_*joe 5 mysql import docker

我基于 Docker Hub 上的 MySQL 官方镜像创建了一个 docker 容器。它工作正常,但我在数据库导入方面遇到了一些麻烦。

我的带有 SQL 指令的文件已存储在容器的 /docker-entrypoint-initdb.d 文件夹中,但它不起作用!我已将 sql-import.sql 复制到 /var/lib/docker/volumes/mysql-dump/_data,但当我调用“SHOW DATABASES;”时只能看到数据库的名称 在我的容器内。当我调用“SHOW TABLES FROM myDB;”时,没有可用的表。我该如何导入 MySQL 数据库的内容?

这是我的 Dockerfile:

FROM mysql:5.7
ADD ./init-scripts/*.sql /docker-entrypoint-initdb.d/
ADD ./config/my.cnf /root/
RUN cd /root/ && \
chmod 0600 my.cnf && \
mv my.cnf .my.cnf

ENV MYSQL_DATABASE=regex
ENV MYSQL_ROOT_PASSWORD=mypassword

EXPOSE 3306
Run Code Online (Sandbox Code Playgroud)

MySQL 容器中的 MySQL 视图

GoA*_* Oz 3

有多种导入方法。如果您的容器正在运行,则使用 docker exec:

解决方案一:

docker exec -i <id_conteneur> /usr/bin/mysql -u <fooUser> -e "CREATE DATABASE mydb"

cat schema.sql | docker exec -i <id_conteneur> /usr/bin/mysql -u <fooUser> --password=<password> <database>
Run Code Online (Sandbox Code Playgroud)

解决方案2:

在 bash 脚本中:

#!/bin/bash 
/usr/bin/mysqld_safe --skip-grant-tables &
mysql -u <fooUser> -e "CREATE DATABASE mydb" 
mysql -u <fooUser> mydb < schema.sql
Run Code Online (Sandbox Code Playgroud)

并使用 Run 命令添加到您的 DockerFile:

ADD create_db.sh /tmp/create_db.sh
RUN /tmp/create_db.sh
Run Code Online (Sandbox Code Playgroud)