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

基于mysql5.7制作自定义的docker镜像,适用于xxl-job依赖的数据库,自动执行初始化脚本(ddl语句和dml语句)

一、背景

xxl-job-admin依赖mysql数据库,且需执行初始化脚本,包括ddl和dml语句。
具体的步骤总结如下:

  • 1、新建数据库xxl_job
  • 2、创建mysql表table
  • 3、执行dml语句,包括新建admin用户及密码,创建执行器和任务。

毫无疑问,人工每次去操作这些,不仅耗费人力和时间,还容易出错。

所以,本文试着基于mysql官方镜像,制作一个属于自己的数据库镜像。

使用xxl-job的版本是2.2.0,下文所做的脚本都是基于该版本。

二、制作自己的镜像

在制作docker镜像前,你需要准备好Dockerfile和init.sql

1、Dockerfile

# 使用官方 MySQL 5.7 镜像作为基础镜像
FROM mysql:5.7# 设置环境变量,用于 MySQL 配置
ENV MYSQL_ROOT_PASSWORD=123456# 将初始化 SQL 脚本文件复制到容器中
COPY init.sql /docker-entrypoint-initdb.d/# 暴露 MySQL 默认端口
EXPOSE 3306

2、sql脚本(init.sql)

CREATE database if NOT EXISTS `xxl_job` default character set utf8mb4 collate utf8mb4_unicode_ci;
use `xxl_job`;SET NAMES utf8mb4;CREATE TABLE `xxl_job_info` (`id` int(11) NOT NULL AUTO_INCREMENT,`job_group` int(11) NOT NULL COMMENT '执行器主键ID',`job_cron` varchar(128) NOT NULL COMMENT '任务执行CRON',`job_desc` varchar(255) NOT NULL,`add_time` datetime DEFAULT NULL,`update_time` datetime DEFAULT NULL,`author` varchar(64) DEFAULT NULL COMMENT '作者',`alarm_email` varchar(255) DEFAULT NULL COMMENT '报警邮件',`executor_route_strategy` varchar(50) DEFAULT NULL COMMENT '执行器路由策略',`executor_handler` varchar(255) DEFAULT NULL COMMENT '执行器任务handler',`executor_param` varchar(512) DEFAULT NULL COMMENT '执行器任务参数',`executor_block_strategy` varchar(50) DEFAULT NULL COMMENT '阻塞处理策略',`executor_timeout` int(11) NOT NULL DEFAULT 0 COMMENT '任务执行超时时间,单位秒',`executor_fail_retry_count` int(11) NOT NULL DEFAULT 0 COMMENT '失败重试次数',`glue_type` varchar(50) NOT NULL COMMENT 'GLUE类型',`glue_source` mediumtext DEFAULT NULL COMMENT 'GLUE源代码',`glue_remark` varchar(128) DEFAULT NULL COMMENT 'GLUE备注',`glue_updatetime` datetime DEFAULT NULL COMMENT 'GLUE更新时间',`child_jobid` varchar(255) DEFAULT NULL COMMENT '子任务ID,多个逗号分隔',`trigger_status` tinyint(4) NOT NULL DEFAULT 0 COMMENT '调度状态:0-停止,1-运行',`trigger_last_time` bigint(13) NOT NULL DEFAULT 0 COMMENT '上次调度时间',`trigger_next_time` bigint(13) NOT NULL DEFAULT 0 COMMENT '下次调度时间',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;CREATE TABLE `xxl_job_log` (`id` bigint(20) NOT NULL AUTO_INCREMENT,`job_group` int(11) NOT NULL COMMENT '执行器主键ID',`job_id` int(11) NOT NULL COMMENT '任务,主键ID',`executor_address` varchar(255) DEFAULT NULL COMMENT '执行器地址,本次执行的地址',`executor_handler` varchar(255) DEFAULT NULL COMMENT '执行器任务handler',`executor_param` varchar(512) DEFAULT NULL COMMENT '执行器任务参数',`executor_sharding_param` varchar(20) DEFAULT NULL COMMENT '执行器任务分片参数,格式如 1/2',`executor_fail_retry_count` int(11) NOT NULL DEFAULT 0 COMMENT '失败重试次数',`trigger_time` datetime DEFAULT NULL COMMENT '调度-时间',`trigger_code` int(11) NOT NULL COMMENT '调度-结果',`trigger_msg` text DEFAULT NULL COMMENT '调度-日志',`handle_time` datetime DEFAULT NULL COMMENT '执行-时间',`handle_code` int(11) NOT NULL COMMENT '执行-状态',`handle_msg` text DEFAULT NULL COMMENT '执行-日志',`alarm_status` tinyint(4) NOT NULL DEFAULT 0 COMMENT '告警状态:0-默认、1-无需告警、2-告警成功、3-告警失败',PRIMARY KEY (`id`),KEY `I_trigger_time` (`trigger_time`),KEY `I_handle_code` (`handle_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;CREATE TABLE `xxl_job_log_report` (`id` int(11) NOT NULL AUTO_INCREMENT,`trigger_day` datetime DEFAULT NULL COMMENT '调度-时间',`running_count` int(11) NOT NULL DEFAULT 0 COMMENT '运行中-日志数量',`suc_count` int(11) NOT NULL DEFAULT 0 COMMENT '执行成功-日志数量',`fail_count` int(11) NOT NULL DEFAULT 0 COMMENT '执行失败-日志数量',PRIMARY KEY (`id`),UNIQUE KEY `i_trigger_day` (`trigger_day`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;CREATE TABLE `xxl_job_logglue` (`id` int(11) NOT NULL AUTO_INCREMENT,`job_id` int(11) NOT NULL COMMENT '任务,主键ID',`glue_type` varchar(50) DEFAULT NULL COMMENT 'GLUE类型',`glue_source` mediumtext DEFAULT NULL COMMENT 'GLUE源代码',`glue_remark` varchar(128) NOT NULL COMMENT 'GLUE备注',`add_time` datetime DEFAULT NULL,`update_time` datetime DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;CREATE TABLE `xxl_job_registry` (`id` int(11) NOT NULL AUTO_INCREMENT,`registry_group` varchar(50) NOT NULL,`registry_key` varchar(255) NOT NULL,`registry_value` varchar(255) NOT NULL,`update_time` datetime DEFAULT NULL,PRIMARY KEY (`id`),KEY `i_g_k_v` (`registry_group`,`registry_key`,`registry_value`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;CREATE TABLE `xxl_job_group` (`id` int(11) NOT NULL AUTO_INCREMENT,`app_name` varchar(64) NOT NULL COMMENT '执行器AppName',`title` varchar(12) NOT NULL COMMENT '执行器名称',`address_type` tinyint(4) NOT NULL DEFAULT 0 COMMENT '执行器地址类型:0=自动注册、1=手动录入',`address_list` varchar(512) DEFAULT NULL COMMENT '执行器地址列表,多地址逗号分隔',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;CREATE TABLE `xxl_job_user` (`id` int(11) NOT NULL AUTO_INCREMENT,`username` varchar(50) NOT NULL COMMENT '账号',`password` varchar(50) NOT NULL COMMENT '密码',`role` tinyint(4) NOT NULL COMMENT '角色:0-普通用户、1-管理员',`permission` varchar(255) DEFAULT NULL COMMENT '权限:执行器ID列表,多个逗号分割',PRIMARY KEY (`id`),UNIQUE KEY `i_username` (`username`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;CREATE TABLE `xxl_job_lock` (`lock_name` varchar(50) NOT NULL COMMENT '锁名称',PRIMARY KEY (`lock_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;INSERT INTO `xxl_job_group` (`id`,`app_name`,`title`,`address_type`,`address_list`)
VALUES (1,'user-service','用户服务',0, NULL);// 注意字段 alarm_email 赋空值,而非null
INSERT INTO `xxl_job_info` (`job_group`,`job_cron`,`job_desc`,`add_time`,`update_time`,`author`,`alarm_email`,`executor_route_strategy`,`executor_handler`,`executor_param`,`executor_block_strategy`,`executor_timeout`,`executor_fail_retry_count`,`glue_type`,`glue_source`,`glue_remark`,`glue_updatetime`,`child_jobid`,`trigger_status`,`trigger_last_time`,`trigger_next_time`)
VALUES (1,'0 0 1 * * ?','定时整理工作',now(),now(),'admin','','ROUND','autoRemoveEmptyRoom','','SERIAL_EXECUTION',0,0,'BEAN','','GLUE代码初始化','2022-08-08 11:01:23','',1,1692032400000,1692118800000);// 注意字段 permission 赋空值,而非null
INSERT INTO `xxl_job_user`(`id`, `username`, `password`, `role`, `permission`) VALUES (1, 'admin', 'e10adc3949ba59abbe56e057f20f883e', 1, '');INSERT INTO `xxl_job_lock` ( `lock_name`) VALUES ( 'schedule_lock');

3、构建及推送镜像

docker build -t xxx/xx-job-mysql:2.2.0-20230824 .docker tag xxx/xx-job-mysql:2.2.0-20230824 192.168.5.6:8086/xxx/xx-job-mysql:2.2.0-20230824docker push 192.168.5.6:8086/xxx/xx-job-mysql:2.2.0-20230824

三、测试镜像

1、执行容器

docker run -it --name xx-job-mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3308:3306 xxx/xx-job-mysql:2.2.0-20230824

在这里插入图片描述
可以看到,它启动后会执行/docker-entrypoint-initdb.d/init.sql
在这里插入图片描述
最后msyql启动成功!!

在这里插入图片描述

2、连接mysql

连接地址是: mysql -h 192.168.828 -u root -p123456

在这里插入图片描述

在这里插入图片描述

3、在xxl-job-admin查看

  • 新增的用户admin
    在这里插入图片描述

  • 创建执行器
    在这里插入图片描述

  • 创建任务
    在这里插入图片描述

四、docker-compose部署

如果你是使用docker-compose部署,这里也贴出来:

version: '3'
services:mysql:image: 192.168.5.6:8086/xxx/xx-job-mysql:2.2.0-20230824container_name: mysqlrestart: alwaysports:- "3308:3306"volumes:- ./mysql/data:/var/lib/mysql- ./mysql/config:/etc/mysql/conf.d- /etc/localtime:/etc/localtimeenvironment:MYSQL_ROOT_PASSWORD: 123456TIME_ZONE: Asia/Shanghai

这里,我们做了volume持久化,其实对于xxl-job可以不用做data数据持久。但是你搭建一个数据库,可能不仅仅是适用于xxl-job。
在这里插入图片描述

http://www.lryc.cn/news/137686.html

相关文章:

  • LeetCodeHot100python版本:单调栈,栈,队列,堆
  • JUC初识
  • stm32之5.长按按键(使用时钟源)调整跑马灯速度
  • element ui datePick时间日期一段时间,限制选择日期的范围
  • kubernetes--技术文档-真--集群搭建-三台服务器一主二从(非高可用)-三服务器位于同交换机中
  • 高性能MySQL实战(三):性能优化
  • 198. 打家劫舍
  • Pydev·离线git包
  • Vue-12.集成postcss.config.js
  • 基于前端技术原生HTML、JS、CSS 电子病历编辑器源码
  • Linux环境下远程访问SVN服务:SVN内网穿透的详细配置与操作指南
  • 创建k8s operator
  • python模拟登入某平台+破解验证码
  • 【图像分割】理论篇(2)经典图像分割网络基于vgg16的Unet
  • vue插入重复的html内容
  • 计算机网络-物理层(三)-信道的极限容量
  • Http/Websocket协议的长连接和短连接的错误认识详细解读(史上最通俗)
  • 两两交换链表中的节点
  • HTTP与RPC的取舍
  • 微前端学习(上)
  • 【Axure视频教程】标签版多选下拉列表
  • Sharepoint2013必备软件安装路径
  • C++day4(关系运算符的重载)
  • 农业水价综合改革系统主要组成
  • 使用批处理文件(.bat)启动多个CMD窗口并执行命令
  • 开源项目-会议室预约管理系统
  • Flask路由注册route的几种方式
  • Elasticsearch 查询之Function Score Query
  • 【3D激光SLAM】LOAM源代码解析--scanRegistration.cpp
  • 解锁ChatGLM-6B的潜力:优化大语言模型训练,突破任务困难与答案解析难题