跳到主要内容

数据库迁移脚本

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构概览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能考虑
  8. 故障排除指南
  9. 结论
  10. 附录

简介

本文件档详细说明了数据库迁移脚本的设计与实现,涵盖数据库版本管理、迁移策略、DDL变更脚本编写规范、执行顺序、数据迁移最佳实践、不同数据库类型(MySQL、TDengine)的迁移差异、自动化迁移工具使用指南以及生产环境迁移的安全策略。

项目结构

该项目包含多种数据库类型的迁移脚本和工具,支持主流关系型数据库(MySQL、PostgreSQL、Oracle、SQL Server、达梦、人大金仓、openGauss)以及时序数据库TDengine。

Mermaid Diagram Code:

graph TB
subgraph "数据库类型"
MySQL[MySQL]
TDengine[TDengine]
PG[PostgreSQL]
Oracle[Oracle]
SQLServer[SQL Server]
DM[达梦]
Kingbase[人大金仓]
OpenGauss[openGauss]
end
subgraph "迁移工具"
Converter[数据库转换器]
Jenkins[Jenkins自动化]
Docker[Docker Compose]
end
subgraph "配置文件"
DevConfig[开发配置]
ProdConfig[生产配置]
end
MySQL --> Converter
TDengine --> Converter
PG --> Converter
Oracle --> Converter
SQLServer --> Converter
DM --> Converter
Kingbase --> Converter
OpenGauss --> Converter
Jenkins --> MySQL
Jenkins --> TDengine
Docker --> MySQL
Docker --> PG
Docker --> Oracle
Docker --> SQLServer
Docker --> DM
Docker --> Kingbase
Docker --> OpenGauss
DevConfig --> Jenkins
ProdConfig --> Jenkins

图表来源

章节来源

核心组件

数据库配置管理

项目采用YAML配置文件管理多数据库连接,支持开发和生产环境的不同配置:

Mermaid Diagram Code:

classDiagram
class DataSourceConfig {
+spring autoconfigure exclude
+druid 监控配置
+dynamic 连接池配置
+多个数据库连接
+验证查询配置
}
class MySQLConfig {
+driver-class-name : com.mysql.cj.jdbc.Driver
+validation-query : SELECT 1 FROM DUAL
+批量写入优化
}
class TDengineConfig {
+driver-class-name : com.taosdata.jdbc.rs.RestfulDriver
+RESTful API连接
+时序数据库特性
}
DataSourceConfig --> MySQLConfig
DataSourceConfig --> TDengineConfig

图表来源

自动化迁移工具

提供统一的数据库转换器,支持多种数据库类型的DDL转换:

Mermaid Diagram Code:

classDiagram
class Convertor {
<<abstract>>
+src : str
+db_type : str
+content : str
+translate_type(type, size)
+gen_create(ddl)
+gen_pk(table_name)
+gen_index(ddl)
+gen_comment(table_sql, table_name)
+gen_insert(table_name)
}
class MySQLConvertor {
+translate_type(type, size)
+gen_create(ddl)
+gen_index(ddl)
+gen_comment(table_sql, table_name)
+gen_insert(table_name)
}
class PostgreSQLConvertor {
+translate_type(type, size)
+gen_create(ddl)
+gen_index(ddl)
+gen_comment(table_sql, table_name)
+gen_insert(table_name)
}
class OracleConvertor {
+translate_type(type, size)
+gen_create(ddl)
+gen_index(ddl)
+gen_comment(table_sql, table_name)
+gen_insert(table_name)
}
Convertor <|-- MySQLConvertor
Convertor <|-- PostgreSQLConvertor
Convertor <|-- OracleConvertor

图表来源

章节来源

架构概览

项目采用分层架构设计,支持多数据库类型和自动化迁移流程:

Mermaid Diagram Code:

sequenceDiagram
participant Dev as 开发人员
participant Tool as 迁移工具
participant DB as 目标数据库
participant Config as 配置管理
Dev->>Tool : 提交迁移脚本
Tool->>Tool : 解析DDL结构
Tool->>Tool : 类型转换
Tool->>DB : 执行迁移
DB->>Config : 更新版本信息
Config->>Dev : 返回执行结果

图表来源

详细组件分析

MySQL迁移策略

MySQL作为主要的关系型数据库,提供了完整的迁移脚本和最佳实践:

DDL变更脚本规范

Mermaid Diagram Code:

flowchart TD
Start([开始迁移]) --> CheckFK["检查外键约束"]
CheckFK --> DropTables["备份现有表结构"]
DropTables --> CreateTables["创建新表结构"]
CreateTables --> AddIndexes["添加索引"]
AddIndexes --> AddConstraints["添加约束"]
AddConstraints --> TestData["数据验证"]
TestData --> End([完成迁移])

图表来源

数据迁移最佳实践

MySQL迁移遵循以下原则:

  • 使用事务确保数据一致性
  • 分批处理大数据量
  • 预先创建索引以提高性能
  • 验证数据完整性

章节来源

TDengine迁移策略

TDengine作为时序数据库,具有特殊的迁移要求和优化策略:

时序数据迁移特点

Mermaid Diagram Code:

graph LR
subgraph "数据写入模式"
Ordered[有序写入]
Unordered[乱序写入]
end
subgraph "存储优化"
Compression[列式压缩]
Indexing[时间索引]
end
subgraph "迁移策略"
Archive[归档方案]
ETL[ETL清洗]
Rewrite[有序重写]
end
Ordered --> Compression
Unordered --> Indexing
Archive --> ETL
ETL --> Rewrite

图表来源

乱序写入问题分析

根据测试结果显示,乱序写入会导致存储空间大幅增加:

写入方式数据量占用空间压缩比
有序插入123306953 条约 3.39GB4.86%
乱序插入124087779 条约 26.04GB37.09%

章节来源

自动化迁移工具

Docker Compose集成

项目提供完整的Docker Compose配置,支持多种数据库的快速部署和测试:

Mermaid Diagram Code:

flowchart TD
DockerCompose[docker-compose.yaml] --> MySQL[MySQL 8.0.33]
DockerCompose --> PostgreSQL[PostgreSQL 14.2]
DockerCompose --> Oracle[Oracle XE]
DockerCompose --> SQLServer[SQL Server 2017]
DockerCompose --> DM[达梦 DM8]
DockerCompose --> Kingbase[人大金仓]
DockerCompose --> OpenGauss[openGauss 5.0.0]
MySQL --> InitScript[初始化脚本]
PostgreSQL --> InitScript
Oracle --> InitScript
SQLServer --> InitScript
DM --> InitScript
Kingbase --> InitScript
OpenGauss --> InitScript

图表来源

Jenkins自动化部署

提供完整的CI/CD流水线,支持多模块、多服务器的自动化部署:

Mermaid Diagram Code:

sequenceDiagram
participant Jenkins as Jenkins
participant Server as 目标服务器
participant Container as Docker容器
Jenkins->>Jenkins : 解析环境变量
Jenkins->>Server : SSH连接
Server->>Container : 停止旧容器
Jenkins->>Server : 拉取新镜像
Jenkins->>Server : 启动新容器
Server->>Jenkins : 返回部署状态

图表来源

章节来源

依赖关系分析

数据库连接依赖

项目中的数据库连接配置显示了多数据源的支持情况:

Mermaid Diagram Code:

graph TB
subgraph "开发环境"
DevMySQL[MySQL开发库]
DevTD[TDengine开发库]
end
subgraph "生产环境"
ProdSystem[System库]
ProdInfra[Infra库]
ProdBPM[BPM库]
ProdReport[Report库]
ProdTD[TDengine生产库]
end
DevMySQL --> ProdSystem
DevTD --> ProdTD
ProdSystem --> ProdInfra
ProdSystem --> ProdBPM
ProdSystem --> ProdReport

图表来源

迁移工具依赖

转换器工具支持多种数据库类型,具有良好的扩展性:

Mermaid Diagram Code:

classDiagram
class DatabaseSupport {
+MySQL支持 ✓
+PostgreSQL支持 ✓
+Oracle支持 ✓
+SQL Server支持 ✓
+达梦支持 ✓
+人大金仓支持 ✓
+openGauss支持 ✓
+TDengine支持 ✓
}
class MigrationFeatures {
+DDL转换 ✓
+数据迁移 ✓
+类型映射 ✓
+索引处理 ✓
+注释保留 ✓
}
DatabaseSupport --> MigrationFeatures

图表来源

章节来源

性能考虑

MySQL性能优化

  • 批量写入优化:启用rewriteBatchedStatements=true
  • 连接池配置:合理设置初始大小、最大活跃数
  • 索引优化:预先创建复合索引
  • 查询优化:使用合适的查询计划

TDengine性能优化

基于测试结果,建议采用以下策略:

  1. 数据预处理:在应用层实现数据缓存与排序
  2. 架构优化:使用消息队列维持时间有序消费
  3. 配置优化:合理设置乱序容忍窗口
  4. 监控优化:持续监控压缩比和磁盘占用

章节来源

故障排除指南

常见迁移问题

数据库连接问题

  1. 连接超时:检查网络连接和防火墙设置
  2. 认证失败:验证用户名密码和权限配置
  3. 驱动兼容性:确保使用正确的JDBC驱动版本

迁移执行问题

  1. DDL语法错误:检查目标数据库的语法支持
  2. 数据类型不匹配:使用转换器进行类型映射
  3. 索引冲突:先删除后重建或使用条件创建

性能问题

  1. 迁移时间过长:采用分批处理和并行执行
  2. 内存不足:调整JVM参数和连接池配置
  3. 磁盘空间不足:清理临时文件和日志

章节来源

结论

本项目提供了完整的数据库迁移解决方案,包括:

  1. 多数据库支持:覆盖主流关系型数据库和时序数据库
  2. 自动化工具:提供统一的迁移转换器和部署工具
  3. 最佳实践:基于实际测试结果制定优化策略
  4. 安全策略:完善的备份、回滚和监控机制

通过标准化的迁移流程和工具链,可以有效降低数据库迁移的风险和复杂度,提高迁移效率和成功率。

附录

迁移脚本示例

MySQL迁移示例

-- 开启事务
START TRANSACTION;

-- 创建新表
CREATE TABLE new_table (
id BIGINT PRIMARY KEY,
name VARCHAR(255),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- 添加索引
CREATE INDEX idx_name ON new_table(name);

-- 提交事务
COMMIT;

TDengine迁移示例

-- 创建数据库
CREATE DATABASE app_runtime_2025120
BUFFER 256
CACHESIZE 1 CACHEMODEL 'none';

-- 创建超级表
CREATE STABLE app_runtime_2025120.flow_app_runtime (
record_time timestamp,
data_key varchar(300) PRIMARY KEY,
mac varchar(20),
cpu_id varchar(255)
) TAGS (package_name varchar(100), day int);

配置文件示例

开发环境配置

spring:
datasource:
druid:
stat:
enabled: true
log-slow-sql: true
slow-sql-millis: 100
system:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/ik_yudao_base
username: root
password: password

生产环境配置

spring:
datasource:
system:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://prod-server:3306/ik_yudao_system
username: ik_yudao_system
password: secure_password
td_report:
driver-class-name: com.taosdata.jdbc.rs.RestfulDriver
url: jdbc:TAOS-RS://tdengine-server:6041/report_db
用户文档
AI 助手
Agent 列表
请选择一个 Agent 开始对话
AI 问答