docker容器启动mysql执行初始化sql脚本实现(代码片段)

Allocator Allocator     2023-02-27     240

关键词:

文章目录

背景

docker容器方式启动Mysql想在启动后执行一些初始化sql脚本(如创建访问数据库的user以及赋予相应权限,执行db创建sql脚本,执行table创建的sql脚本). 且这个初始化过程全局只运行一次(比如中途停掉容器再启动,不再运行脚本,这种全局运行一次的限制,不再sql脚本里面体现). 本文详细讲解如何实现这一过程.

准备工作

本地安装docker且安装docker-compose. 机器上安装的是docker desktop, 所以 docker-compose 不用额外安装, 其他环境去github 上安装对应版本的docker-compose 即可. 其次 mysql 的 docker 镜像, 选择mysql版本是8.0.

实现过程

dockerhub 查看官方镜像mysql docker image说明
其中有一部分:

总结一下就是容器中有一个/docker-entrypoint-initdb.d 目录, 此目录可用于执行初始化脚本, 且执行顺序是按照文件名字母顺序执行. 因此再docker-compose 文件中只要挂载一个宿主机目录到容器中目录 /docker-entrypoint-initdb.d, 然后在挂载宿主机目录中添加自己的初始化脚本即可. 执行一次的保证是,容器启动会检查/var/lib/mysql 目录下是否有数据, 如果mysql不是第一次启动,那么该文件夹下就有数据,/docker-entrypoint-initdb.d 目录中脚本就不会执行; 如果mysql第一次启动,由于没有数据,所以/var/lib/mysql内容为空,初始化脚本就会执行. 当然,由于/var/lib/mysql 目录一般是挂载在宿主机器上的,所以清空该目录也可触发初始化脚本执行. 初始化脚本执行顺序是按照脚本名字的字母顺序执行, 因此可以按照1_功能.sql 命名方式去给初始化脚本命名, 比如:

1_create_user.sql
2_create_db.sql
3_create_table.sql
4_init_table_data.sql
5_xxx.sql

这样就能控制初始化脚本执行顺序.

启动mysql的docker镜像,怎么自动执行初始化sql脚本

参考技术A您好,请问您是想知道启动mysql的docker镜像,怎么自动执行初始化sql脚本吗? 查看详情

Docker撰写MySql初始化脚本未执行

】Docker撰写MySql初始化脚本未执行【英文标题】:DockercomposeMySqlinitialisationscriptsnotexecuting【发布时间】:2019-04-2317:34:18【问题描述】:我在让mysql容器运行我的初始化脚本时遇到问题。我有两个文件create.sql和insert.sql,用于初始化... 查看详情

docker mysql容器启动后退出

...布时间】:2019-05-0620:44:34【问题描述】:我正在尝试使用初始化脚本启动dockerMySQL容器。我的Dockerfile看起来像这样:FROMnode:11WORKDIR/usr/src/appCOPY./init.sql/docker-entrypoint-initdb.d/C 查看详情

entrypoint/cmdprocess入口点进程是什么?docker容器dockerfileentrypoint.sh文件作用,为什么在脚本开头要执行source~/.bashrc?

...以配置Docker容器的初始环境,如配置环境变量、执行初始化命令,以及运行容器的服务。这个脚本文件是Docker容器启动过程的核心部分,负责容器在启动后的正常运行。为什么在脚本开头要执行source~/.bashrc?在Dock... 查看详情

docker部署docker-compose部署mysql容器及创建数据库失败问题(代码片段)

...f;小结前言    最近在尝试用docker部署项目,在尝试初始化mysql数据时遇到创建数据库失败的问题,卡了一段时间,特此记录下解决过程。Docker-compose部署mysqlDocker-compose.yml文件services:db:image:mysql:5.7.36container_name:my_dbres... 查看详情

如何在不同的(依赖的)容器启动后对 docker 容器运行 .sql 脚本?

】如何在不同的(依赖的)容器启动后对docker容器运行.sql脚本?【英文标题】:Howtorun.sqlscriptagainstdockercontainerafteradifferent(dependent)containerstarts?【发布时间】:2022-01-0201:31:56【问题描述】:我有一个SpringBoot应用程序容器myApi,它... 查看详情

docker-compose mysql init sql 未执行

】docker-composemysqlinitsql未执行【英文标题】:docker-composemysqlinitsqlisnotexecuted【发布时间】:2018-11-1113:35:50【问题描述】:我正在尝试设置一个mysqldocker容器并执行initsql脚本。不幸的是,没有执行sql脚本。我做错了什么?version:\'3.3... 查看详情

docker容器启动时执行脚本run/bin/bash执行多条指令

1、首先需要编写需要启动的脚本,并将脚本放在/etc/init.d/目录下如:cs.sh2、修改权限3、chkconfig--addcs.sh4、chkconfigcs.shon启动容器时dockerrun-idt***/***/bin/bashcs1.shcs2.shcs3.sh最好在每个脚本后面都加上tail-f/dev/null  查看详情

Docker.io init.d 脚本在启动容器上不起作用

...oo/”上有一个带有odoo的容器。“/etc/init.d/odoo-server”上的初始化脚本#!/bin/bash###BEGININITINFO#Provides:odoo#Re 查看详情

在 docker 容器中启动 mysql 后插入数据

】在docker容器中启动mysql后插入数据【英文标题】:Insertdataaftermysqlstartedinadockercontainer【发布时间】:2017-10-2620:24:38【问题描述】:我正在使用docker在容器中启动mysql服务。容器启动后,我想通过python脚本自动向数据库插入一些... 查看详情

docker~写个容器启动的bash脚本

...本,可以把一般指令组织在一起,统一去执行,比如我有一些docker容器需要统一去启动,这时,你可以把它们写成一个bash脚本,但有一点要注意,你的文档格式需要是unix,大家可以使用notepad++表写脚本,然后上传到linux上就行了!如果你希望... 查看详情

如何在 Docker 容器内的 CockroachDB 中运行 SQL 脚本?

】如何在Docker容器内的CockroachDB中运行SQL脚本?【英文标题】:HowdoIrunaSQLscriptinCockroachDBinsideaDockercontainer?【发布时间】:2018-10-1822:13:21【问题描述】:我使用以下内容启动了CockroachDB容器:dockerrun-d--name=node1--hostname=node1\\--network=d... 查看详情

Docker 容器需要很长时间才能通过 shell 脚本启动

】Docker容器需要很长时间才能通过shell脚本启动【英文标题】:Dockercontainertakeslongtostartviashellscripting【发布时间】:2018-11-1918:25:24【问题描述】:我是shell脚本的新手,最近开始接触基本的。我已经编写了代码来检查我是否有cassa... 查看详情

docker mysql initdb 脚本无法连接到数据库

...10-2908:38:58【问题描述】:我正在使用mysqldocker容器,并将初始化脚本添加到docker-entrypoint-initdb.d中,如下所述:https://hub.docker.com/_/mysql/(初始化新实例)。init脚 查看详情

docker关闭镜像后,容器无法启动---conflict.thecontainernam

当执行关闭某个镜像:执行关闭: docker stop fa671dd6bdfbdockerps重启某个容器:docker run --name itbilu-mysql -e MYSQL_ROOT_PASSWORD=my-pass -d mysql:5.7报异常:删除对应的容器:docker&nb 查看详情

centos配置开机启动脚本启动docker容器(代码片段)

原文:Centos配置开机启动脚本启动docker容器Centos配置开机启动脚本启动docker容器Intro我们的Centos服务器上部署了好多个docker容器,因故重启的时候就会导致还得手动去手动重启这些docker容器,为什么不写个脚本自动重启呢,于是就... 查看详情

docker容器内服务自启动(代码片段)

使用Ubuntu镜像,安装Apache2后,需要Aapche2随着容器启动而启动。之前尝试在/etc/rc里面修改等方法,并不能随着容器启动。然后把启动写到CMD["service","apache2","start"]里面,容器无法启动(因为执行完就退出容... 查看详情

springboot使用——项目启动自动执行sql脚本

...库,数据需求是:每次修改缺陷重启项目后,测试数据会初始化成最初的数据核心思想在SpringBoot的架构中,DataSourceInitializer类可以在项目启动后初始化数据,我们可以通过自动执行自定义sql脚本初始化数据。通过自定义DataSourceI... 查看详情