数据上云方案

数据上云方案

Deng YongJie's blog 16 2025-06-21

一、信息收集及前置准备

  • 本地数据库版本信息、目标数据库版本信息

  • 确认本地MySQL版本与目标Aurora MySQL版本的兼容性

  • 确认本地MySQL是否有并行查询的需求?Aurora MySQL默认禁用,要启用此功能,请使用启用了 aurora_parallel_query 参数的数据库实例参数组

  • 本地数据库数据存储量,要迁移的对象数量

  • 本地机房上行带宽吞吐量,可用的网络吞吐量

  • 本地数据库全量备份一次需要耗时多久

  • 是否有主机监控、mysql_exporter性能监控

  • 字符集和排序规则:确保源数据库和目标数据库使用相同的字符集和排序规则(collation),避免迁移后出现乱码或其他问题

  • SQL语句兼容性:虽然Aurora MySQL与MySQL高度兼容,但仍可能存在细微的语法差异。需要测试环境验证业务流程所有关键SQL是否正常工作

  • 验证源表是否启用了自动增量,DMS不会自动将AUTO_INCREMENT属性迁移到目标数据库

  • 本地数据库确认NTP时间同步准确性

二、创建DMS-fleet收集器,生成迁移的评估建议

  • 把收集器msi安装包下载到本地,然后安装数据收集器
  • 手动管理监控对象,添加数据库服务器及数据库连接信息,也可以通过.csv文件导入
  • 开启收集器,可以自定义时间范围:1-60天。最快1天后采集完成,采集信息包括服务器配置文件信息(例如,操作系统、数量、数量RAM)CPU、数据库元数据和利用率指标
  • 收集完毕后生成详细的迁移评估建议,包括硬件配置、操作系统信息、数据库元数据和利用率指标等

image-20250120104916514

三、本地MySQL数据库调整配置文件参数

新建数据库用户,具有以下权限

CREATE USER 'your_user'@'%' IDENTIFIED BY 'your_password';
GRANT SELECT, RELOAD, LOCK TABLES, REPLICATION SLAVE, BINLOG MONITOR, SHOW VIEW ON  *.* TO 'your_user'@'%'; 

关键参数设置

https://docs.aws.amazon.com/zh_cn/dms/latest/userguide/dm-data-providers-source-mysql.html

参数
server-id 将该参数设置为 1 或更大的值。
log-bin 设置二进制日志文件的路径,例如 log-bin=E:\MySql_Logs\BinLog。请勿包含文件扩展名。
binlog_format 将该参数设置为 ROW。在复制期间使用此设置,因为在某些情况下,如果 binlog_format 设置为 STATEMENT,那么在将数据复制到目标时可能会导致不一致。如果 binlog_format 设置为 MIXED,数据库引擎还会向目标写入类似的不一致数据,因为数据库引擎会自动切换到基于 STATEMENT 的日志记录。
expire_logs_days 将该参数设置为 1 或更大的值。为防止过度使用磁盘空间,不要使用默认值 0。
binlog_checksum 将该参数设置为 NONE
binlog_row_image 将该参数设置为 FULL
log_slave_updates TRUE如果使用 My SQL 或 MariaDB 副本作为源,此参数设置为True。
  • binlog日志保留时间至少 24 小时以上

  • 用于连接到数据源的用户名具有以下限制:

    • 长度为 2 到 64 个字符。
    • 不能包含空格。
    • 可以包含以下字符:a-z、A-Z、0-9、下划线 (_)。
    • 必须以 a-z 或 A-Z 开头。
  • 用于连接到数据源的密码具有以下限制:

    • 不能包含以下任何字符:单引号 (')、双引号 (")、分号 (;)或空格。
  • 以下变量设置较大的超时值,至少为 5 分钟,防止迁移期间断开连接

    • net_read_timeout 默认30秒
    • net_write_timeout 默认30秒
    • wait_timeout 默认8小时,可不做调整

四、本地MySQL数据库配置从节点

  • 添加从节点减少主节点压力:将备份任务、DMS同步任务放在从节点上可以避免对主节点性能的影响,因为备份过程可能会消耗大量资源。
  • 从节点复制延迟需实时同步

五、创建Aurora MySQL集群

先定义好参数组,修改参数需要重启实例才能生效

image-20250206101212436

修改下面参数并保存

net_read_timeout = 28800
net_write_timeout = 28800
binlog_format = ROW
binlog_checksum = NONE
binlog_row_image = full
log_bin_trust_function_creators = 1

数据库集群引用此参数组

新建数据库用户,具有以下权限

CREATE USER 'your_user'@'%' IDENTIFIED BY 'your_password';

GRANT ALTER, CREATE, DROP, INDEX, INSERT, UPDATE, DELETE, SELECT, CREATE VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER, EXECUTE, REFERENCES ON *.* TO 'your_user'@'%';
GRANT REPLICATION SLAVE, REPLICATION CLIENT  ON *.* TO 'your_user'@'%'; GRANT SLAVE MONITOR  ON *.* TO 'your_user'@'%';

六、DMS前置准备

  • 新建对应VPC的子网组
  • 创建源端点、目标端点
  • 创建复制实例
  • 选择子网组
  • 创建迁移任务
  • 创建迁移前评估任务

手动提供目标端点信息或secret manager

七、DMS数据完全加载后,自动立即执行校验功能—注意事项

https://docs.aws.amazon.com/zh_cn/dms/latest/userguide/CHAP_Validating.html

  • 数据验证要求表具有主键或唯一索引。

    • 主键列不能是 CLOBBLOBBYTE 类型。
    • 对于 VARCHARCHAR 类型的主键列,长度必须小于 1024。必须在数据类型中指定长度。不能使用无界数据类型作为数据验证的主键。
  • 多个数据库合并为一个数据库时,不支持数据验证。

  • 如果在校验 DMS 期间之外修改了目标数据库,则可能无法准确报告差异。如果应用程序向目标表写入数据,同时对同一个表执行验证,DMS 会出现此结果。

  • 在验证期间不断修改一行或多行,DMS 无法验证这些行。

  • DMS 检测到超过 10000 条失败或暂停的记录,则会停止验证。在继续之前,先解决数据验证失败的问题。

  • DMS 不支持视图的数据验证。

八、全量迁移前—本地数据库执行全量备份

  • 在执行迁移任务前,约定业务低峰期在从节点进行备份,以减少对性能的影响

  • 使用 --single-transaction 选项可以在不锁定整个数据库的情况下获得一致的备份

  • 注意备份期间会大量占用CPU、内存

九、DMS任务开始数据迁移+复制同步

  • 复制实例创建迁移任务
  • 迁移类型选择:迁移和复制

数据迁移流程期间DMS支持以下 DDL 语句:

  • 创建表
  • 删除表
  • 重命名表
  • 截断表
  • 添加列
  • 删除列
  • 重命名列
  • 更改列数据类型

为了最大程度降低风险,在迁移过程明确禁止更改数据库结构:不要对本地机房MySQL数据库的表结构进行修改,如增加或删除字段、修改数据类型、建表、删表、重命名等等。所有数据库相关的操作,整个数据上云完成后,稳定运行一段时间后再操作。

创建数据迁移复制任务,开启完全加载,持续复制类型,并在执行数据迁移的情况下验证。拆分每个任务对应每个库

十、全量迁移完成后—验证数据校验

https://docs.aws.amazon.com/zh_cn/dms/latest/userguide/CHAP_Validating.html

方法一:console界面创建复制任务时,以json编辑修改参数

https://docs.aws.amazon.com/zh_cn/dms/latest/userguide/CHAP_Tasks.CustomizingTasks.TaskSettings.DataValidation.html

image-20250121113746886

"ValidationSettings": {
     "EnableValidation": true,
     "ThreadCount": 10,
     "HandleCollationDiff": true,
     "RecordFailureDelayLimitInMinutes": 30
  }     

方法二:在CLI创建或修改任务以开始数据验证true时,使用,将EnableValidation参数设置为。以下示例创建一个任务并启用数据验证。

aws dms create-replication-task  
  --replication-task-settings '{"ValidationSettings":{"EnableValidation":true}}' 
  --replication-instance-arn arn:aws:dms:us-east-1:5731014:
     rep:36KWVMB7Q  
  --source-endpoint-arn arn:aws:dms:us-east-1:5731014:
     endpoint:CSZAEFQURFYMM  
  --target-endpoint-arn arn:aws:dms:us-east-1:5731014:
     endpoint:CGPP7MF6WT4JQ 
  --migration-type full-load-and-cdc 
  --table-mappings '{"rules": [{"rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": {"schema-name": "data_types", "table-name": "%"}, "rule-action": "include"}]}'

使用describe-table-statistics命令接收JSON格式的数据验证报告。以下命令显示数据验证报告。

aws dms  describe-table-statistics --replication-task-arn arn:aws:dms:ap-east-1:713881828472:task:ZW6MFLSBUZFBZLA4FOWSQ6IKBA

十一、约定时间维护窗口—业务切换

  • 业务低峰期停服,暂停业务写入:在切换窗口开始时暂停所有对MySQL的写入操作
  • **停服后:**业务切换前,本地数据库执行全量之后的增量备份
  • DMS自动无限期复制同步数据:等待几分钟,再次校验数据一致性、完整性。手动执行SQL对比数量与DMS校验
  • 切换应用程序数据库连接:将应用程序的数据库连接切换到Aurora MySQL集群
  • **验证业务全流程可用性:**所有业务流程,验证关键SQL的可用性
# 手动验证数据库所有表的行数
SELECT 
    table_name AS `Table`, 
    table_rows AS `Rows`
FROM 
    information_schema.tables
WHERE 
    table_schema = 'f11_cloud_sales'
ORDER BY 
    table_rows DESC;


SELECT 
    table_name AS `Table`, 
    table_rows AS `Rows`
FROM 
    information_schema.tables
WHERE 
    table_schema = 'f11_user'
ORDER BY 
    table_rows DESC;