当前位置: 首页 > article >正文

在 Docker 容器内运行 MySQL 并执行 SQL 脚本文件

在 Docker 容器内运行 MySQL 并执行 SQL 脚本文件(如 cube_admin.sql),可以通过几种方式实现。以下是一种常见的方法,假设已经将 SQL 脚本文件 cube_admin.sql 放置在容器可以访问的位置(例如,通过 Docker 构建上下文复制进去,或者将其放置在容器可以挂载的卷中):

确保 SQL 脚本文件在容器中可用:
如果在构建 Docker 镜像时已经将 cube_admin.sql 文件包含在内,确保它位于容器内的某个目录,比如 /docker-entrypoint-initdb.d/(这个目录是 MySQL 官方镜像在容器启动时自动执行 SQL 脚本的默认位置)。但是,请注意,这种方法仅适用于容器首次启动时。
如果希望在容器已经运行后执行脚本,可能需要将文件复制到容器中,或者通过 Docker 卷将其挂载到容器内。
使用 docker exec 命令在运行的容器中执行命令:
如果已经将 cube_admin.sql 文件挂载到容器内的某个位置(比如 /sql/ 目录),可以使用 docker exec 命令在 MySQL 容器中运行 mysql 客户端,并通过 -e 选项传递执行脚本的命令。但是,由于 mysql 客户端不直接支持 -e 选项执行文件(它只支持执行单行 SQL 语句),需要使用 < 重定向符从文件中读取 SQL 命令。不过,由于 docker exec 不直接支持重定向,需要在容器内部执行一个 shell 命令来完成这一操作。
正确的命令可能看起来像这样:

docker exec -it mysql bash -c "mysql -u root -p < /sql/cube_admin.sql"

注意:这里的 -p 选项会提示您输入密码。如果不想在命令行中手动输入密码,有几种选择:

在构建 Docker 镜像时设置 MySQL 的 root 密码为空(不推荐,出于安全考虑)。
使用 MySQL 客户端的 --password 选项直接传递密码(但这样会在命令历史中留下密码痕迹)。
使用 Docker secrets 或其他更安全的方法来管理密码。
预先配置 MySQL 用户,并为其设置无需密码的登录(同样不推荐,除非在受信任的环境中)。
由于安全原因,通常建议避免在命令行中直接传递密码。相反,可以考虑使用 Docker secrets、环境变量(尽管它们也可能在进程列表中暴露)或交互式输入密码。

使用 Docker 卷:
另一种方法是将包含 cube_admin.sql 文件的目录挂载为 Docker 卷,然后在容器内部使用 mysql 客户端执行该文件。这可以通过在 docker run 命令中使用 --volume(或 -v)选项来实现。
请记住,执行这些操作时,需要有足够的权限来访问和运行 Docker 命令,以及访问 MySQL 容器和其中的数据。此外,始终确保SQL 脚本和数据库操作符合安全和数据完整性要求。


http://www.kler.cn/a/441342.html

相关文章:

  • 关于低代码技术架构的思考
  • 反向代理模块
  • 基于RIP的MGRE实验
  • 探索与创新:DeepSeek R1与Ollama在深度研究中的应用
  • AI常见的算法
  • SpringCloud系列教程:微服务的未来(十七)监听Nacos配置变更、更新路由、实现动态路由
  • 【小白包会的】使用supervisor 管理docker内多进程
  • [maven]使用spring
  • Docker--Docker Registry(镜像仓库)
  • [Unity Shader] 【游戏开发】Unity Shader的结构2-深入理解 SubShader 的结构与应用
  • 【C 语言文件操作】—— 内存映射与高效 I/O 策略的深度融合
  • LabVIEW 保存文件
  • SpringBoot实现定时发送邮件功能
  • 【GoF23种设计模式】02_单例模式(Singleton Pattern)
  • 复原IP地址 什么是运算符重载? 如何在 C++ 中进行运算符重载?运算符重载在面向对象编程中的好处是什么?getline方法
  • 爬虫基础学习
  • 同轴共桨单兵微型无人机技术详解
  • 机器学习-多元线性回归
  • C# 入门编程
  • 使用C#获取有关磁盘驱动器的信息例如大小和可用空间
  • V少JS基础班之第二弹
  • 【基础】nginx简单配置
  • leetcode--mysql
  • HTMLCSS:3D卡片翻转悬停效果
  • 运维报错:SALV报错 CX_SALV_OBJECT_NOT_FOUND
  • PHP8.4下webman直接使用topthink/think-orm