利用Linux-bash将sql文件导入到docker的MySQL容器内
前言
通常 MySQL 无法找到 磁盘内的文件
,是因为 MySQL 运行在 Docker 容器中,它可能无法访问 /mnt/c/...
这个 WSL2 的挂载路径。容器没有权限读取 Windows 目录的 SQL 文件,MySQL 只能访问容器内部的文件,但我们的 .sql
文件在 Windows 目录里
在 Linux(包括 WSL2)环境下,使用 Bash 命令可以方便地将 SQL 文件导入 Docker 内运行的 MySQL 容器
docker exec -it mysql-server bash
这个命令:
- 进入 MySQL 容器的 Linux 终端(bash),你在里面可以执行各种 Linux 命令。
- 然后你再手动运行
mysql -u root -p
进入 MySQL 交互式模式。
步骤如下:
plaintext
1 | docker exec -it mysql-server bash # 进入容器的 Linux 终端(shell) |
如果想同时访问 Linux 文件系统和 MySQL,就先进入
bash
你可以在 bash
里执行其他 Linux 命令,比如:
plaintext
1 | ls /var/lib/mysql |
这些是 MySQL 数据库的配置文件和数据文件路径,只有 bash
能访问它们。
docker exec -it mysql-server mysql -u root -p
这个命令:
- 直接运行
mysql
客户端,让你进入 MySQL 交互式模式。 - 不经过
bash
,也就无法运行 Linux 命令(比如ls
、cd
)。
如果只是想操作数据库,这个方法更直接
plaintext
1 | docker exec -it mysql-server mysql -u root -p |
导入文件
1. 前置条件
确保你的环境已满足以下条件:
- 已安装 Docker 并运行 Docker 守护进程 (
docker ps
能正常执行)。 - Docker 内部已运行一个 MySQL 容器(假设容器名称为
mysql-server
) - 已创建一个 MySQL 数据库(如
test
) - SQL 文件(如
DDL+drop.sql
)存放在 Linux 可访问的路径,比如:/mnt/c/Users/Brian/Downloads/DDL+drop.sql (WSL2) ~/Downloads/DDL+drop.sql (Linux)
方法一:直接用 docker exec
导入 SQL 文件
适用于: 你的 SQL 文件存放在 Linux 可访问路径,直接执行导入。
plaintext
1 | docker exec -i mysql-server mysql -u root -p test < /mnt/c/Users/Brian/Downloads/DDL+drop.sql |
然后输入 MySQL root 密码
说明:
docker exec -i
:在容器内运行命令,并允许输入数据。mysql-server
:MySQL 容器名称。mysql -u root -p test
:使用 root 用户连接test
数据库。< DDL+drop.sql
:将 SQL 文件内容传递给mysql
命令执行。
方法二:复制 SQL 文件到容器后导入
适用于: 你的 SQL 文件在 Windows 或 Linux 目录中,MySQL 可能无法直接访问。
① 复制 SQL 文件到 MySQL 容器
plaintext
1 | docker cp /mnt/c/Users/Brian/Downloads/DDL+drop.sql mysql-server:/DDL+drop.sql |
这会将 DDL+drop.sql
文件复制到容器内 /DDL+drop.sql
目录
注意:docker cp 是 Docker 的命令,需要在操作系统的终端中运行,而不是在 MySQL 命令行中运行
② 进入 MySQL 容器
plaintext
1 | docker exec -it mysql-server bash |
③ 进入 MySQL 交互模式
plaintext
1 | mysql -u root -p |
输入 MySQL root 密码
④ 选择数据库
plaintext
1 | USE test; |
如果 sql 文件内包含 CREATE/USE 数据库等操作,要注意 CREATE 的数据库名称,如果已存在相同的名称,MySQL 会将他们合并
⑤ 执行 SQL 文件
plaintext
1 | SOURCE /DDL+drop.sql; |
成功后,可以用:
plaintext
1 | SHOW TABLES; |
检查是否导入成功
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 ZJNULL!
评论