3. 源端环境评估:数据库版本、字符集、存储引擎、表结构复杂度、数据量统计与增长趋势分析

源端环境评估是数据库迁移的起点,也是决定迁移策略、工具选型与风险控制的核心依据。评估不充分,后续所有环节都可能出现不可预见的阻塞。本节从五个关键维度展开:数据库版本、字符集、存储引擎、表结构复杂度以及数据量统计与增长趋势。

3.1 数据库版本与兼容性评估

版本差异直接影响迁移工具的支持能力、SQL 语法兼容性以及二进制日志(Binlog)格式。评估时需明确以下信息:

评估项 检查内容 常见风险
主版本号 5.6 / 5.7 / 8.0 / 5.1 8.0 默认 caching_sha2_password 认证插件,旧客户端无法连接
小版本号 如 5.7.35 部分 Bug 在特定小版本修复,影响迁移稳定性
Binlog 格式 ROW / STATEMENT / MIXED STATEMENT 格式可能导致数据不一致,推荐 ROW
GTID 开启状态 ON / OFF GTID 未开启时,主从切换与断点续传更复杂
SQL_MODE 如 ONLY_FULL_GROUP_BY 目标端 SQL_MODE 不一致可能导致写入失败
实践建议:使用 SELECT VERSION() 获取版本号;通过 SHOW VARIABLES LIKE 'binlog_format' 确认 Binlog 格式;检查 @@GLOBAL.GTID_MODE 确认 GTID 状态。建议在迁移前将源端小版本升级至同主版本的最新补丁版。

3.2 字符集与排序规则评估

字符集不匹配是迁移后数据乱码、索引长度超限、排序异常的主要诱因。评估重点包括:

  • 实例级字符集:character_set_server、collation_server
  • 库级字符集:DEFAULT CHARACTER SET
  • 表级字符集:SHOW CREATE TABLE 中的 CHARSET 声明
  • 列级字符集:字段的 CHARACTER SET 与 COLLATE
  • 连接字符集:character_set_client、character_set_connection
常见陷阱:源端使用 utf8mb3(别名 utf8),目标端使用 utf8mb4。虽然 utf8mb4 是 utf8mb3 的超集,但索引长度限制不同——utf8mb4 下 VARCHAR(255) 索引占用 1020 字节,可能超出 InnoDB 最大 767 字节限制,导致建表失败。迁移前必须检查所有索引列的长度。

3.3 存储引擎分布与兼容性

不同存储引擎在事务支持、锁机制、外键约束、全文索引等方面存在差异。迁移前需统计各引擎的表数量与数据量占比。

存储引擎 迁移关注点 目标端兼容性
InnoDB 事务、外键、MVCC 完全兼容,推荐
MyISAM 不支持事务,表级锁,全文索引 需转换为 InnoDB,注意全文索引语法差异
TokuDB / RocksDB 压缩、写优化、分区 目标端可能不支持,需评估替代方案
Memory 数据易失,重启后清空 建议改为 InnoDB 并评估缓存策略
统计脚本示例:
SELECT ENGINE, COUNT(*) AS table_count, 
       ROUND(SUM(DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024, 2) AS total_size_mb
FROM information_schema.TABLES
WHERE TABLE_SCHEMA NOT IN ('mysql','performance_schema','sys','information_schema')
GROUP BY ENGINE
ORDER BY total_size_mb DESC;

3.4 表结构复杂度评估

表结构复杂度直接影响 DDL 转换、数据校验与增量同步的难度。重点评估以下要素:

  • 大字段与 BLOB:TEXT、MEDIUMTEXT、LONGTEXT、BLOB 等字段在迁移时占用大量网络带宽与内存,且无法在 WHERE 条件中直接使用。
  • 外键约束:迁移顺序必须遵循外键依赖关系,否则导致写入失败。
  • 自增列与序列:自增列在迁移后可能出现主键冲突,需提前设置偏移量或使用 UUID。
  • 分区表:分区键、分区类型(RANGE/LIST/HASH)在目标端必须一致,否则数据无法正确路由。
  • 触发器与存储过程:迁移后需重新编译,且目标端可能不支持源端特有的语法扩展。
复杂度量化方法:建议对每张表计算“复杂度评分”,评分因子包括:字段数(>50 加 1 分)、索引数(>10 加 1 分)、外键数(>5 加 2 分)、分区数(>100 加 2 分)、大字段数(>3 加 1 分)。评分 ≥5 的表应列为迁移重点监控对象。

3.5 数据量统计与增长趋势分析

数据量决定迁移窗口、网络带宽需求与存储规划。增长趋势则影响迁移后的容量规划与分库分表策略。

3.5.1 数据量统计维度

统计维度 SQL / 方法 用途
总数据量 SELECT SUM(DATA_LENGTH + INDEX_LENGTH) FROM information_schema.TABLES 评估全量迁移耗时与存储需求
Top N 大表 ORDER BY DATA_LENGTH DESC LIMIT 20 识别迁移瓶颈表,考虑并行迁移或分批处理
行数统计 SELECT TABLE_NAME, TABLE_ROWS FROM information_schema.TABLES 评估索引重建与数据校验的耗时
碎片率 DATA_FREE / (DATA_LENGTH + INDEX_LENGTH) 高碎片表迁移前建议先 OPTIMIZE TABLE

3.5.2 增长趋势分析方法

增长趋势分析需要至少 3 个月的历史监控数据,推荐使用以下方法:

  • 日增量统计:通过 Binlog 解析或定时采集 information_schema 快照,计算每日新增数据量。
  • 周/月环比:对比相邻周期数据量变化率,识别是否存在突发增长(如大促、日志归档)。
  • 线性回归预测:基于历史数据拟合增长曲线,预测未来 6~12 个月的数据总量。
增长趋势采集脚本(每日快照):
-- 创建历史表
CREATE TABLE db_size_history (
  snapshot_date DATE,
  table_schema VARCHAR(64),
  table_name VARCHAR(64),
  data_length BIGINT,
  index_length BIGINT,
  table_rows BIGINT,
  PRIMARY KEY (snapshot_date, table_schema, table_name)
);

-- 每日采集
INSERT INTO db_size_history
SELECT CURDATE(), TABLE_SCHEMA, TABLE_NAME, 
       DATA_LENGTH, INDEX_LENGTH, TABLE_ROWS
FROM information_schema.TABLES
WHERE TABLE_SCHEMA NOT IN ('mysql','performance_schema','sys','information_schema');

3.6 源端评估全景图

以下 SVG 图展示了源端环境评估的五个核心维度及其关联关系,帮助团队在迁移前建立完整的评估视图。

源端环境评估全景图 源端数据库 数据库版本 5.6/5.7/8.0 字符集 utf8mb4/utf8mb3 存储引擎 InnoDB/MyISAM 表结构复杂度 大字段/外键/分区 数据量统计 总量/Top大表/碎片 增长趋势分析 日增量/月环比/预测 评估产出物 源端环境评估报告(含版本兼容矩阵、字符集映射表、大表清单、增长预测曲线)

3.7 评估报告输出清单

完成上述五个维度的评估后,应输出以下标准化文档,作为迁移方案设计的输入:

文档名称 核心内容 责任人
源端版本兼容矩阵 源端版本、目标端版本、已知不兼容特性列表 DBA
字符集映射表 每个库/表的字符集与排序规则,目标端转换方案 DBA + 开发
存储引擎转换清单 非 InnoDB 表列表、转换风险与回退方案 DBA
大表与复杂结构清单 Top 20 大表、高复杂度表、分区表详情 DBA + 架构师
数据量统计与增长预测 当前总量、日增量、月环比、未来 6 个月预测 DBA + 运维
关键提醒:源端评估不是一次性工作。在迁移执行期间,源端数据仍在持续写入,评估报告中的“数据量统计”与“增长趋势”必须在迁移启动前 24 小时内重新确认,避免因突发流量导致迁移窗口不足或存储溢出。