一、信息收集及前置准备
-
本地数据库版本信息、目标数据库版本信息
-
确认本地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、数据库元数据和利用率指标
- 收集完毕后生成详细的迁移评估建议,包括硬件配置、操作系统信息、数据库元数据和利用率指标等
三、本地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集群
先定义好参数组,修改参数需要重启实例才能生效
修改下面参数并保存
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
-
数据验证要求表具有主键或唯一索引。
- 主键列不能是
CLOB
、BLOB
或BYTE
类型。 - 对于
VARCHAR
或CHAR
类型的主键列,长度必须小于 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
"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;