Docker容器启动时初始化MySQL数据库

news2024/11/26 2:31:54

1.前言
  Docker在开发中使用的越来越多了,最近搞了一个Spring Boot应用,为了方便部署将Mysql也放在Docker中运行。那么怎么初始化 SQL脚本以及数据呢?

  我这里有两个传统方案。 第一种方案是在容器启动后手动导入,太low了不行。第二种在Spring Boot客户端连接Mysql容器时初始化数据库,你可以参考使用flyway进行数据库版本控制一文,但是这依赖客户端的能力。能不能做到Mysql容器启动时就自己初始化数据库呢?当然可以!今天就来演示一下。全部代码见文末。

2.原理
  当Mysql容器首次启动时,会在 /docker-entrypoint-initdb.d目录下扫描 .sh,.sql,.sql.gz类型的文件。如果这些类型的文件存在,将执行它们来初始化一个数据库。这些文件会按照字母的顺序执行。默认情况下它们会初始化在启动容器时声明的 MYSQL_DATABASE变量定义的数据库中,例如下面的命令会初始化一个REGION_DB 数据库:

 $ docker run --name some-mysql -e MYSQL_DATABASE=REGION_DB -d mysql:tag

 如果你的启动命令没有指定数据库那么就必须在数据库DDL脚本中声明并指定使用该数据库。否则就会实现下面的异常:

 ERROR 1046 (3D000) at line 7: No database selected

 那么接下来我们将利用这一机制来实现Docker容器启动时初始化数据库。

3.自定义Dockerfile

  我们编写自己的Dockerfile来实现我们的需求,这里以 Mysql:5.7 为例。不同的版本可能有一定的出入,需要详细去阅读官方文档。脚本如下:

   FROM mysql:5.7

  LABEL OG=felord.cn

  COPY utf8mb4.cnf /etc/mysql/conf.d/utf8mb4.cnf

  COPY ./sql  /tmp/sql

  RUN mv /tmp/sql/*.sql /docker-entrypoint-initdb.d

  RUN rm -rf /tmp/sql

  第一步,引入官方 Mysql:5.7 Docker镜像。

  第二步,无实际意义,主要是作者、组织信息。

  第三步,很重要!本来我没有配置第三行,结果运行容器后发现初始化数据的中文全部乱码了。所以需要在初始化数据库前修改Mysql的编码等配置,这里我顺便把时区也改为了+8:00。

  第四步,复制包含数据库脚本的 ./sql文件夹到镜像的/tmp/sql下。

  第五步,使用 mv 命令把第四步拷贝的文件夹下的所有.sql文件复制到 /docker-entrypoint-initdb.d下,这样才能利用2.章节的机制进行初始化数据库。

  第六步,删除使用过的临时目录。

  然后你可以通过构建镜像命令构建自定义的Mysql镜像:

   # 一定不要忘记最后的一个 . 点

  docker build -t mysql:5.7c .

  通过mysql:5.7c镜像启动一个名称为mysql-service的容器,root密码为123456,并持久化数据到宿主机 D:/mysql/data下:

请在文本框输入文字

 docker run --name mysql-service -v d:/mysql/data:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7c

  小贴士:你可以通过 SHOW VARIABLES LIKE 'character%' 查看字符集是否更改为utf8mb4,也可以通过SHOW VARIABLES LIKE '%time_zone%' 查看时区是否是东八区。

4.总结
  今天我们自定义一个可以执行初始化数据库的Mysql镜像,方便我们进行部署。你也可以参考这个思路来定制其它一些自己需要的Docker镜像。

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

 

    视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方进群即可自行领取。    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1219507.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

骨传导能保护听力吗?骨传导耳机是智商税吗?

先说答案,骨传导耳机是可以保护听力的!并且骨传导耳机也不是智商税!甚至在某些场景下,骨传导耳机比其他耳机更适合。 为什么说骨传导耳机会保护听力呢?因为骨传导耳机跟入耳式耳机的传递声音方式是不一样的&#xff0c…

将Agent技术的灵活性引入RPA,清华等发布自动化智能体ProAgent

近日,来自清华大学的研究人员联合面壁智能、中国人民大学、MIT、CMU 等机构共同发布了新一代流程自动化范式 “智能体流程自动化” Agentic Process Automation(APA),结合大模型智能体帮助人类进行工作流构建,并让智能…

十大热门骨传导蓝牙耳机排行榜,精选最佳的五款骨传导蓝牙耳机

排行榜十大热门骨传导耳机,哪些才是综合实力最强的骨传导耳机? 近年来,骨传导耳机越来越受欢迎。由于骨传导耳机不需要插入耳朵,用户能够同时感知周围环境的声音,不会完全隔绝外界,增加了使用时的安全性。…

Hive Lateral View explode列为空时导致数据异常丢失

一、问题描述 日常工作中我们经常会遇到一些非结构化数据,因此常常会将Lateral View 结合explode使用,达到将非结构化数据转化成结构化数据的目的,但是该方法对应explode的内容是有非null限制的,否则就有可能造成数据缺失。 SE…

cocos----刚体

刚体(Rigidbody) 刚体(Rigidbody)是运动学(Kinematic)中的一个概念,指在运动中和受力作用后,形状和大小不变,而且内部各点的相对位置不变的物体。在 Unity3D 中&#xff…

拼多多百亿补贴商品详情API接口系列

拼多多API接口是拼多多网提供的一种应用程序接口,允许开发者通过程序访问拼多多网站的数据和功能。通过拼多多API接口,开发者可以开发各种应用程序,如店铺管理工具、数据分析工具、购物比价工具等。在本章中,我们将介绍拼多多API接…

pdb restore in ADG database

Effect of PITR on Dataguard Environment (Standby MRP Crashed with ORA-39873) (Doc ID 1591492.1)​编辑To Bottom In this Document Symptoms Cause Solution APPLIES TO: Oracle Database Cloud Exadata Service - Version N/A and later Oracle Database Cloud Servic…

“轻松实现文件复制备份,自动编号轻松管理

在日常工作中,我们经常需要复制文件到另一个文件夹进行备份或整理。然而,手动复制粘贴不仅效率低下,还容易出错。为了解决这个问题,我们推出了一款全新的文件工具——【文件批量改名高手】,让你轻松搞定文件复制备份&a…

生命在于学习——主板跳线的学习

一、前言 好吧,又是一个我之前没接触过的东西,秉持遇到什么就学什么的精神,来学! 我一发小来找我,问我关于跳线的事情,我就一个表情: 好吧,我承认,纵观我23岁&#xf…

拼多多商家私信群发脚本,按键精灵版工具,源码分享

也是用按键精灵写的,实现的功能就是通过图色识别拼多多商品列表然后逐个对商家客服进行私信,私信内容可以在脚本里面提前配置好,代码怎么部署?回答:粘贴到你的按键精灵就行了,因为代码完全开源。 UI界面&a…

⑩① 详解Linux安装 MySQL 8.0【保姆级教程】

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ Linux - MySQL8.0安装 ⑩①【Linux】MySQL8.0安…

谷歌浏览器F12/打开开发者工具网络就无法连接报错

刷新页面就出现提示: 原因:浏览器网络设置的问题,网络设置了离线状态,切换回3G即可。

Vmware虚拟机创建快照、克隆和备份 创建文件夹共享方法

Vmware虚拟机备份 方法一:虚拟机快照备份 虚拟机 快照备份 像是Windows系统里的系统 还原点 功能,它能拍摄一张您虚拟机当前的状态,并将其保存起来,您可以随时通过恢复到快照功能将虚拟机还原到拍摄快照时的状态。 步骤1. 打开…

MIB 6.1810实验Xv6 and Unix utilities(3)pingpong

Mit6.S081-实验1-Xv6 and Unix utilities-pingpong问题_Isana_Yashiro的博客-CSDN博客 Write a user-level program that uses xv6 system calls to ping-pong a byte between two processes over a pair of pipes, one for each direction. The parent should send a byte to…

centos7中安装Nginx和使用Nginx详细操作

环境: 准备了三台centos7虚拟机:192.168.213.4、192.168.213.5、192.168.213.6。 一、安装 三台虚拟机都安装下面的步骤执行,安装Nginx,为后面的使用演示使用。 1、安装必备组件: sudo yum install yum-utils2、配置yum源 在下面的文件目录…

高标准农田可视化

高标准农田是指通过土地整治、土壤改良、水利设施、农电配套、机械化作业等措施,提升农田质量和生产能力,达到田块平整、集中连片、设施完善、节水高效、宜机作业、土壤肥沃、生态友好、抗灾能力强、与现代农业生产和经营方式相适应的旱涝保收、稳产高产…

算力崩溃!OpenAI陷入瘫痪,中国黑科技能否拯救全球AI?

大数据产业创新服务媒体 ——聚焦数据 改变商业 在当今技术快速发展的时代,OpenAI的ChatGPT无疑成为了人工智能领域的一颗耀眼明星。但是,随着其用户数量的激增,一个不可忽视的问题逐渐浮出水面——算力短缺。这不仅是OpenAI单独的挑战&…

iddata函数合成的数据中采样间隔时间的两种设置方式及其程序举例

iddata函数生成的数据中采样间隔时间的两种设置方式及其程序举例 在对iddata合成的结构体数据,对采样间隔时间的设置可以通过两种方式实现,本文简要讲解其设置方式。 在设置采样间隔时候,会用到属性“ts”。 (1)对于单次实验,ts…

C语言——冒泡排序

一、冒泡排序是什么 冒泡排序: 冒泡排序(Bubble Sort),又被称为气泡排序或泡沫排序。升序时:它会遍历若干次需要排序的数列,每次遍历时,它都会从前往后依次的比较相邻两个数的大小;如果前者比后者大&#x…

FL Studio水果软件2025中文破解版注册机

你是否体验过Tomorrowland现场万人蹦迪的的激情?又是否加入过“死墙(Mosh pit:一种Bass音乐节常有的娱乐方式)”的狂欢盛宴?随着时代发展,以电子音乐为代表的数字音乐已然象征着时尚与潮流。在这股风靡全球…