docker部署mysql初始化数据库

一、前言

        在使用docker部署mysql服务时,往往需要在创建容器时新建database,在需要在创建实例的过程中希望初始化sql脚本。

        mysql官方镜像支持在容器初次启动时自动执行指定的sql脚本或shell脚本(注意:只有初次启动时才能自动执行),在mysql官方的Dockerfile中有下面几句话:(mysql官方地址)

COPY docker-entrypoint.sh /usr/local/bin/
RUN ln -s usr/local/bin/docker-entrypoint.sh /entrypoint.sh # backwards compat
ENTRYPOINT ["docker-entrypoint.sh"]

在容器创建时会调用docker-entrypoint.sh这个脚本,这个脚本会遍历docker-entrypoint-initdb.d目录下所有的.sh和.sql后缀的所有脚本并执行,执行顺序为脚本文件名称排序。

二、实现

        根据mysql官方给出的Dockerfile可知,把我们要初始化的sql脚本放到docker-entrypoint-initdb.d目录下,在mysql容器创建的时候就会根据脚本自动初始化。

我这里是使用的是centos7环境

1.Dockerfile

下面来编写Dockerfile

FROM mysql:5.7
ENV AUTO_RUN_DIR /docker-entrypoint-initdb.d
ENV INSTALL_DB_SQL init_database.sql
COPY ./$INSTALL_DB_SQL $AUTO_RUN_DIR/
RUN chmod 777 $AUTO_RUN_DIR/$INSTALL_DB_SQL

Dockerfile说明:

FROM:从mysql:5.7镜像拉取;

ENV:定义环境变量

COPY:拷贝

RUN:执行

记得要给sql脚本文件添加可执行权限,chmod a+x  也可以

2.编写sql脚本

        把写好的sql脚本放到与Dockerfile同级的目录下

-- 建库
CREATE DATABASE IF NOT EXISTS test_db default charset utf8 COLLATE utf8_general_ci;

-- 切换数据库
use test_db;

-- 建表
DROP TABLE IF EXISTS `test_table`;

CREATE TABLE `test_table` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(20) DEFAULT NULL COMMENT '姓名',
`sex` varchar(11) DEFAULT NULL COMMENT '性别',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 插入数据
INSERT INTO `test_table` (`id`, `name`, `sex`)
VALUES
(1,'张三','男'),
(2,'李四','女');

3.构建镜像并启动容器

        将Dockerfile和sql脚本编写好后构建镜像

docker build -t init_mysql:v0.1 .

        

        查看镜像

docker images | grep init_mysql

        创建mysql容器后查看状态

docker run --name mysql -p 13306:3306 -e MYSQL_ROOT_PASSWORD=root -d init_mysql:v0.1
docker ps -a | grep mysql

 至此创建mysql容器并初始化已完成

三、验证

进入到mysql容器中,查看docker-entrypoint-initdb.d/目录下是否有我们的sql脚本

进入mysql,输入密码后,查看sql脚本创建的库、表、数据是否存在

mysql -u root -p

show databases;
use test_db;
show tables;
select * from test_table;

END! 

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据引用\[1\]和引用\[2\]的内容,你在使用Docker-compose部署MySQL时遇到了创建数据库失败的问题。根据你提供的配置文件和目录结构,我注意到你在`docker-compose.yml`文件中指定了要执行的初始化脚本,并将其放置在`/docker-entrypoint-initdb.d/`目录下。然而,你提到在使用Navicat连接后发现`my_db`数据库未被创建。 可能的原因是初始化脚本文件的格式或位置不正确。请确保你的初始化脚本文件具有正确的扩展名(.sh、.sql或.sql.gz),并且位于正确的目录(`./init/`)。此外,你还可以检查脚本文件的权限是否正确设置。 另外,你还可以查看MySQL容器的日志,以了解是否有任何与数据库创建相关的错误信息。你可以使用以下命令查看MySQL容器的日志: ``` docker logs <container_name> ``` 请将`<container_name>`替换为你MySQL容器的名称。 如果问题仍然存在,你可以尝试使用引用\[3\]中提供的另一种Docker-compose配置文件作为参考,其中包含了更多的配置选项和参数。你可以根据自己的需求进行适当的修改。 希望这些信息对你有帮助,如果你还有其他问题,请随时提问。 #### 引用[.reference_title] - *1* *2* [【Docker部署Docker-compose部署mysql容器及创建数据库失败问题](https://blog.csdn.net/zt15732625878/article/details/122373968)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [docker-compose docker-swarm mysql5.7.26 mysql8 部署失败Table ‘mysql.user‘ doesn‘t exist](https://blog.csdn.net/zhaojiacan/article/details/120723178)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值