Skip to content

新增数据源环境属性和项目所属业务 #3008

@winfredLIN

Description

@winfredLIN

升级方案

在执行升级方案之前,请务必备份数据!

您可以使用升级工具(需要填写dms的连接信息)或者根据下面的逻辑执行升级:
升级工具将会执行下面的升级步骤,步骤带有示例SQL,你可以根据实际情况修改SQL。

表结构变更(背景,以供参考)

4.2503的表结构

CREATE TABLE `projects` (
  `uid` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL,
  `created_at` datetime(3) DEFAULT NULL,
  `updated_at` datetime(3) DEFAULT NULL,
  `name` varchar(200) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `desc` longtext COLLATE utf8mb4_unicode_ci,
  `business` json DEFAULT NULL,
  `is_fixed_business` tinyint(1) NOT NULL,
  `create_user_uid` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `status` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT 'active',
  `priority` tinyint(3) unsigned NOT NULL DEFAULT '20' COMMENT '''优先级:10=低, 20=中, 30=高''',
  PRIMARY KEY (`uid`),
  UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
CREATE TABLE `db_services` (
  `uid` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL,
  `created_at` datetime(3) DEFAULT NULL,
  `updated_at` datetime(3) DEFAULT NULL,
  `name` varchar(200) COLLATE utf8mb4_unicode_ci NOT NULL,
  `db_type` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `db_host` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `db_port` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `db_user` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `db_password` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `desc` longtext COLLATE utf8mb4_unicode_ci,
  `business` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `additional_params` text COLLATE utf8mb4_unicode_ci,
  `source` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `project_uid` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `maintenance_period` text COLLATE utf8mb4_unicode_ci,
  `extra_parameters` json DEFAULT NULL,
  `is_enable_masking` tinyint(1) DEFAULT NULL,
  `last_connection_status` longtext COLLATE utf8mb4_unicode_ci,
  `last_connection_time` datetime(3) DEFAULT NULL,
  `last_connection_error_msg` longtext COLLATE utf8mb4_unicode_ci,
  `enable_backup` tinyint(1) DEFAULT NULL,
  `backup_max_rows` bigint(20) unsigned NOT NULL DEFAULT '1000',
  PRIMARY KEY (`uid`),
  UNIQUE KEY `project_uid_name` (`name`,`project_uid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci

4.2504的表结构

CREATE TABLE `projects` (
  `uid` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL,
  `created_at` datetime(3) DEFAULT NULL,
  `updated_at` datetime(3) DEFAULT NULL,
  `name` varchar(200) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `desc` longtext COLLATE utf8mb4_unicode_ci,
  `business_tag_uid` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `create_user_uid` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `status` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT 'active',
  `priority` tinyint(3) unsigned NOT NULL DEFAULT '20' COMMENT '''优先级:10=低, 20=中, 30=高''',
  PRIMARY KEY (`uid`),
  UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
CREATE TABLE `db_services` (
  `uid` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL,
  `created_at` datetime(3) DEFAULT NULL,
  `updated_at` datetime(3) DEFAULT NULL,
  `name` varchar(200) COLLATE utf8mb4_unicode_ci NOT NULL,
  `db_type` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `db_host` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `db_port` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `db_user` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `db_password` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `desc` longtext COLLATE utf8mb4_unicode_ci,
  `environment_tag_uid` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL,
  `additional_params` text COLLATE utf8mb4_unicode_ci,
  `source` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `project_uid` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `maintenance_period` text COLLATE utf8mb4_unicode_ci,
  `extra_parameters` json DEFAULT NULL,
  `is_enable_masking` tinyint(1) DEFAULT NULL,
  `last_connection_status` longtext COLLATE utf8mb4_unicode_ci,
  `last_connection_time` datetime(3) DEFAULT NULL,
  `last_connection_error_msg` longtext COLLATE utf8mb4_unicode_ci,
  `enable_backup` tinyint(1) DEFAULT NULL,
  `backup_max_rows` bigint(20) unsigned NOT NULL DEFAULT '1000',
  PRIMARY KEY (`uid`),
  UNIQUE KEY `project_uid_name` (`name`,`project_uid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
CREATE TABLE `business_tags` (
  `uid` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL,
  `created_at` datetime(3) DEFAULT NULL,
  `updated_at` datetime(3) DEFAULT NULL,
  `name` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`uid`),
  UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
CREATE TABLE `environment_tags` (
  `uid` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL,
  `created_at` datetime(3) DEFAULT NULL,
  `updated_at` datetime(3) DEFAULT NULL,
  `project_uid` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `environment_name` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
  PRIMARY KEY (`uid`),
  KEY `project_uid_name` (`project_uid`,`environment_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci

数据关系变更

  1. 2503的版本中,在项目上和数据源上都包含业务,在2504的版本中,将业务和环境属性分离
  2. 2503的项目上的业务和项目的关系是一对多,数据源的业务和数据源的关系是一对一
  3. 2504的版本中,将业务和环境的关系分离,业务和环境的没有关系,业务只和项目相关,且为一对一的关系,环境和数据源相关,且为一对一的关系

升级步骤

总体分三步:

  1. 修改表结构增加列
  2. 迁移数据
  3. 修改表结构,删除不需要的列

假设您所使用的DMS的数据库是dms42503

新增列

USE dms42503;
ALTER TABLE  `db_services` ADD COLUMN `environment_tag_uid` varchar(32)  NOT NULL AFTER `desc`;
ALTER TABLE `projects`  ADD COLUMN `business_tag_uid` varchar(32) DEFAULT NULL AFTER `desc`;

新增表

CREATE TABLE `business_tags` (
  `uid` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL,
  `created_at` datetime(3) DEFAULT NULL,
  `updated_at` datetime(3) DEFAULT NULL,
  `name` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`uid`),
  UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
CREATE TABLE `environment_tags` (
  `uid` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL,
  `created_at` datetime(3) DEFAULT NULL,
  `updated_at` datetime(3) DEFAULT NULL,
  `project_uid` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `environment_name` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
  PRIMARY KEY (`uid`),
  KEY `project_uid_name` (`project_uid`,`environment_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci

数据源业务的变更

将数据源上的业务,调整为环境属性
将每一个数据源上的业务在环境属性表上增加对应记录,并且关联到数据源上

INSERT INTO `dms`.`environment_tags` (
  `uid`, `created_at`, `updated_at`, `project_uid`, `environment_name`
) VALUES (
  "这里填写string的uuid",
  NOW(3), NOW(3), '这里填写项目uid', '这里填写数据源的业务'
);
UPDATE `dms`.`db_services` SET `environment_tag_uid` = '这里填写string的uuid';

为数据源所属的项目增加默认的环境属性标签:DEV TEST UAT PROD OUTSIDE 不需要关联

INSERT INTO `dms`.`environment_tags` (
  `uid`, `created_at`, `updated_at`, `project_uid`, `environment_name`
) VALUES (
  "这里填写string的uuid",
  NOW(3), NOW(3), '这里填写项目uid', '这里填写数据源的业务'
);

项目的业务变更

把项目名称作为所属业务,保存到所属业务的表,并且通过所属业务的uid关联到项目上

INSERT INTO `dms`.`business_tags` (`uid`, `created_at`, `updated_at`, `name`) VALUES ('这里填写的uuid可以从项目的业务中获取', '2025-04-11 18:58:43.003', '2025-04-11 18:58:43.003', 'default');
UPDATE `dms`.`projects` SET `business_tag_uid` = '1910648700540030976';

把项目上的业务(0-n个),作为环境属性,保存到环境属性表中,不需要关联

INSERT INTO `dms`.`environment_tags` (
  `uid`, `created_at`, `updated_at`, `project_uid`, `environment_name`
) VALUES (
  "这里填写string的uuid", -- 第一个值是用雪花算法的方式生成的uuid,这里模拟一下或者手工填写数字的string即可
  NOW(3), NOW(3), '这里填写项目uid', '这里填写项目的业务'
);

删除不需要的列

USE dms42503;
-- 在迁移完数据后,最后删除不需要的列
ALTER TABLE `db_services` DROP COLUMN `business`;
ALTER TABLE `projects` DROP COLUMN `business`;
ALTER TABLE `projects` DROP COLUMN `is_fixed_business`;

实现方案

环境属性

  • 权限:与数据源的增删改权限一致
  • 添加数据源页面:业务字段>>环境属性,必填>>非必填
  • 实现环境属性增删改查功能
  • 使环境属性作为数据源tag并支持展示筛选
  • 已有数据处理:
    • 保留原有值
    • 新增4个环境属性:dev、test、uat、prod
  • 接口开发:
    • 新增增加、修改、查询列表和删除环境属性的四个接口
    • 改造数据源创建、查看等接口,业务字段>>环境属性
  • 升级工具开发:将环境属性的原有值迁移到新表上

所属业务

  • 权限:仅全局管理员可增删改查,其他人仅可查看
  • 添加项目、项目列表:业务字段>>所属业务
  • 已有数据处理:
    • 无业务字段时,将项目名称作为所属业务
    • 有业务字段时,业务字段作为所属业务
  • 实现所属业务增删改查功能
  • 接口开发:
    • 新增增加、修改、查询列表和删除所属业务的四个接口
    • 改造项目创建、查看等接口:业务字段>>所属业务
  • 升级工具开发:将环境属性的原有值迁移到新表上

变更影响面

请前往 Confluence 搜索:全局资源概览 系统设计

受影响的模块或功能

外部引用的潜在问题或风险

版本兼容性

测试建议

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions