您的位置:  首页 > 技术杂谈 > 正文

如何实现 MySQL 代码和数据的一站式变更

2022-09-06 22:00 https://my.oschina.net/koderover/blog/5573697 Zadig云原生交付 次阅读 条评论

 

作为一款开源的关系型数据库管理系统,MySQL 因其体积小灵活性强、运行速度快、成本低而被企业和社区广泛使用。然而在业务迭代中,随着数据的积累和业务场景的复杂化,涉及到数据变更的操作往往会带来额外的心智负担。本文将分析这些痛点,并结合 Zadig 的自定义工作流阐述解决问题的实践,enjoy~

数据变更的痛点

日常研发流程中,涉及到数据变更的场景和痛点包括但不限于:

  1. 开发工程师在 dev 环境进行开发和自测,某次变更既涉及到数据变更(比如引入新的字段),又有业务代码变更,此时只能先登录到数据库中手动执行变更脚本后,再将代码变更部署到 dev 环境中。
  2. 业务数据存放于 MySQL 数据库中(比如账号登录信息、用户下单信息),测试(开发)工程师日常在 qa 环境验收时创建了很多临时测试数据,每次测试完毕都需要手动清理这部分脏数据,将数据恢复至初始状态。
  3. ...

下面以 Zadig 官方提供的 MySQL 数据库变更任务为例,就上述场景分别说明如何在 Zadig 中实现 MySQL 代码、数据的一站式变更,将重复的事情自动化。

准备工作

  1. 搭建项目 microservice-demo,参考教程 如何使用 GitLab + Zadig 实现产品级持续交付
  2. 官方提供的 MySQL 数据库变更任务说明:
    • 实现的功能:连接 MySQL 数据库并执行指定的 SQL 脚本,详细逻辑可在 main.go 源码中查阅。
    • 源码:mysql-runner,目录结构如下:
mysql-runner                   # 任务目录
└── v0.0.1                   # 版本号
    ├── Dockerfile           # 对应 mysql-runner 的镜像构建 Dockerfile
    ├── Makefile             # mysql-runner 的工程编译文件
    ├── main.go              # mysql-runner 任务的实现源码
    └── mysql-runner.yaml    # 任务的 YAML 配置文件

实践一:数据、代码一站式变更

第一步:配置工作流

包括:新建自定义工作流 -> 配置数据变更任务 -> 配置构建任务 -> 配置部署任务。

  1. 新建自定义工作流:点击新建工作流 -> 选择自定义工作流 -> 输入工作流名称 workflow-dev
  2. 配置数据变更任务。
    • 添加阶段:点击+阶段 -> 填写阶段名称数据变更。
    • 添加任务:点击+任务 -> 选择MySQL 数据库变更
    • 配置任务:填写任务名称 mysql-data-update -> 填写变量的值,本例中配置说明如下:
      • mysql_host:MySQL 数据库的地址,指定为固定值
      • mysql_port:MySQL 数据库的端口号,指定为固定值
      • username:MySQL 数据库的用户名,指定为固定值
      • password:MySQL 数据库的密码,指定为固定值并设置为敏感信息
      • query:要执行的 SQL 脚本,指定为运行时输入

至此,数据变更任务配置完毕。

  1. 配置构建任务。
    • 添加构建阶段 -> 点击+任务 -> 选择构建
    • 配置任务名称 build-myapps -> 选择镜像仓库 -> 选择服务组件及构建名称后点击确定

至此,构建任务配置完毕。

  1. 配置部署任务。
    • 添加部署阶段 -> 点击 +任务 -> 选择部署
    • 配置任务名称 deploy-myapps -> 选择环境 dev -> 指定服务为其他任务输出并选择任务 build-myapps

至此所有任务配置完毕,点击保存完成工作流 workflow-dev 的配置。

第二步:执行工作流

点击执行 -> 填写要执行的 SQL 变更脚本 -> 选择需要更新的服务组件及代码信息 -> 启动任务。

本实践中 SQL 变更脚本如下(修改服务 hadas-core 的鉴权类型):

use service_config;
update services set auth_type = 2 where service_name = "hadas-core";

数据变更任务执行完毕前后分别查看 MySQL 数据效果如下(其中 1 为任务执行前,2 为执行后): 第一个数据变更任务执行完毕后,会自动执行后续的构建和部署任务,实现数据和业务的一站式变更。

实践二:脏数据一键自动清理

第一步:配置工作流

包括:新建自定义工作流 -> 配置构建任务 -> 配置部署任务 -> 配置自动化测试任务 -> 配置数据清理任务。

其中新建自定义工作流 workflow-qa、配置构建任务 build-myapps、部署任务 deploy-myapps 参考实践一,此处不再赘述,下面详细介绍自动化测试和数据清理任务的配置。

  1. 配置自动化测试任务:添加阶段自动化测试 -> 添加任务 -> 选择通用任务 -> 填写任务配置。

自动化任务配置请根据自己的实际情况配置,本例中自动化测试用于测试商品创建和修改,运行完毕后会导致系统中遗留状态错误的商品数据。

2. 配置数据清理任务:添加阶段数据清理 -> 添加任务 -> 选择 MySQL 数据库变更 -> 填写任务配置。本例中配置说明如下:

  • 任务名称:handle-dirty-data
  • mysql_host:MySQL 数据库的地址,指定为固定值
  • mysql_port:MySQL 数据库的端口号,指定为固定值
  • username:MySQL 数据库的用户名,指定为固定值
  • password:MySQL 数据库的密码,指定为固定值并设置为敏感信息
  • query:要执行的 SQL 脚本,指定为固定值,本例中脚本如下(删除状态为不在线的商品数据):
use order_info;
delete from product where status = 0;

至此,工作流配置完毕。

第二步:执行工作流

点击执行 -> 选择要更新的服务组件及代码信息 -> 选择 qa 环境 -> 启动任务。 系统会按照顺序依次执行以下阶段:构建 -> 部署 -> 自动化测试 -> 数据清理。 待自动化测试执行完毕后,查看数据库中数据如下: 待数据清理执行完毕后,查看数据库中数据如下,可以看到因自动化测试产生的错误状态数据已被自动清理。

第三步(进阶):配置 Git 触发器,自动清理

  1. 配置触发器:编辑工作流 workflow-qa -> 点击触发器 -> 配置代码库信息、触发事件和工作流执行变量等。
  2. 修改代码并提交到代码库后,会触发工作流执行,自动完成 构建 -> 部署 -> 自动化测试 -> 数据清理 流程,既保障本次变更的质量,又确保下次的自动化测试执行无后顾之忧。

探索更多实践

本文主要讲解了如何在 Zadig 上实现 MySQL 数据以及代码的一站式变更实践。如果官方提供的 MySQL 数据变更任务不能满足日常需求,可以参考 自定义任务 | Zadig 文档 编写符合自己情况的自定义任务,也欢迎在 Zadig 论坛 分享你的实践~

Zadig,让工程师更专注创造。欢迎加入 开源吐槽群🔥

Zadig on Github
Zadig on Gitee

展开阅读全文
  • 0
    感动
  • 0
    路过
  • 0
    高兴
  • 0
    难过
  • 0
    搞笑
  • 0
    无聊
  • 0
    愤怒
  • 0
    同情
热度排行
友情链接