AWS DMS MySql数据同步Elasticsearch
用户需求
- 使用ES实现搜索功能
- MySql数据同步ES中
AWS Database Migration Service (AWS DMS)
-
AWS Database Migration Service (AWS DMS) 是一项云服务,可轻松迁移关系数据库、数据仓库、NoSQL 数据库及其他类型的数据存储。您可以使用 AWS DMS 将数据迁移到 AWS 云,在本地实例之间(通过 AWS 云设置)进行迁移,或者在云与本地设置的组合之间进行迁移。
-
利用 AWS DMS,可以执行一次性迁移,而且可以复制持续更改以保持源和目标同步。如果要更改数据库引擎,可以使用 AWS Schema Conversion Tool (AWS SCT) 将数据库架构转移到新平台。然后,可以使用 AWS DMS 迁移数据。由于 AWS DMS 是 AWS 云的一部分,您将获得 AWS 服务提供的成本效益、上市速度、安全性与灵活性
1.创建子网组
- 子网组配置
- 子网组名称
- 子网组描述
- 选择VPC
- 添加子网
- 添加标签
2.证书
- 数据库开启SSL连接时需要证书
- 导入AWS提供的证书
- 证书地址
- https://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL.html
3.创建复制实例
-
复制实例配置
- 复制实例名称
- 复制实例描述
- 实例类型(配置)
- DMS版本(尽量使用稳定版本,不建议使用Beta版本)
- 分配实例存储空间
- VPC
- 是否开启多可用区
- 是否公网访问
- 如果选择此选项,AWS DMS 将向您的复制实例分配公有 IP 地址,并且您将能够连接到 Amazon VPC外部的数据库
-
高级安全和网络配置
- 复制子网组
- 可用区
- VPC安全组
- KMS主密钥
-
维护
- 次要版本自动升级(建议关闭)
-
标签
4.创建终端节点
- 终端节点类型
- 源终端节点
- 源终端节点允许 AWS DMS 从数据库(内部部署或云中)或其他数据源(如 Amazon S3)读取数据
- 目标终端节点
- 目标终端节点允许 AWS DMS 将数据写入数据库或写入其他数据源
- 源终端节点
- 源终端节点配置
- 终端节点标识符
- 源引擎类型
- aurora
- aurora-postgresql
- s3
- db2
- mariadb
- azuredb
- sqlserver
- mongodb
- mysql
- oracle
- postgres
- sybase
-
目标终端节点配置
- 终端节点标识符
- 源引擎类型
- aurora
- aurora-serverless
- aurora-postgresql
- docdb
- dynamodb
- kinesis
- neptune
- redshift
- s3
- elasticsearch
- kafka
- mariadb
- mysql
- oracle
- postgre
- sybase
-
提供各服务的认证信息
-
特定于终端节点配置
- 额外的连接属性
-
KMS主密钥
-
标签
-
测试终端节点连接(可选)
5.数据迁移遇到的坑
-
DMS支持MySql版本
- MySQL 版本 5.5、5.6、5.7 和 8.0
- MariAdB版本10.0.24至10.0.28、10.1、10.2和10.3至10.3.13
- Amazon Aurora MySQL
-
MySql作为数据源先决条件
-
参数组修改
- binlog_format 设置成 ROW
- binlog_checksum 设置成 NONE
- 将binlog日志保留时间增加到24小时
- call mysql.rds_set_configuration('binlog retention hours', 24);
- 如果您使用Amazon RDS MySQL或Amazon RDS MariaDB只读副本作为源,请在只读副本上启用备份
-
MySql连接报错
- SSL connection error: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol
- 更新AWS RDS的证书,如果RDS未重启。无论DMS终端节点是否使用SSL,均会报错。重启RDS后可正常连接
-
Elasticsearch
- 在 AWS DMS 版本 3.1.2 及更高版本中支持将 Amazon Elasticsearch Service 作为目标
- Migrating from a relational database table to an Amazon ES index
- AWS DMS 支持将数据迁移到 Amazon ES的标量数据类型。在从 Oracle 或 MySQL 等关系数据库迁移到 Amazon ES 时,您可能希望重构存储此数据的方式。
- AWS DMS 支持以下 Amazon ES 标量数据类型:
- Boolean
- Date
- Float
- Int
- String
- AWS DMS 将 Date 类型的数据转换为 String 类型。您可以指定自定义映射来解释这些日期
- 数据迁移任务启动前需要提前在ES中创建与源数据库中表名一致的索引
-
DMS
- DMS数据任务迁移后缺少字段
- DMS不会迁移不支持的数据类型至目标数据终端中
- Source data types for MySQL
- MySql中的JSON/LONGTEXT/MEDIUMTEXT数据类型将在AWS DMS中转换成NCLOB(本机字符大对象)数据类型
- AWS DMS 不支持迁移 LOB 数据类型
- target data types for Elasticsearch
- 所以已MySql为数据源,Elasticsearch为目标终端时
- MySql中的JSON/LONGTEXT/MEDIUMTEXT数据类型将无法迁移至Elasticsearch中
- Source data types for MySQL
- 源数据终端中数据类型字段内容为空时,该字段也不会被迁移至目标终端中
- 对应Case:
- DMS不会迁移不支持的数据类型至目标数据终端中
- DMS数据迁移完成后增量数据无法同步
- Elasticsearch目标终端节点访问角色没有关联对应的访问策略
- 对应Case:
- AWS DMS 无法将任何 LOB 数据类型迁移到 Apache Kafka 终端节点
- DMS数据任务迁移后缺少字段
6.数据库迁移任务
-
任务配置
- 任务标识符
- 复制实例
- 源数据库终端节点
- 目标数据终端节点
- 迁移类型
- 迁移现有数据
- 迁移现有数据并复制持续变更
- 仅复制数据更改
-
任务设置
- 其他配置可以默认(没有深究过)
- 启用 CloudWatch 日志(方便排查问题)
-
表映像
- 迁移规则(源数据规则)
- 架构(库)
- 表名称(表)
- 操作(包含/排除)
- 转换规则(目标数据规则)
- 目标架构(库)
- 目标表(表)
- 目标栏(字段)
- 操作
- 重命名
- 删除列
- 转为小写
- 转为大写
- 添加前缀
- 删除前缀
- 替换前缀
- 添加后缀
- 删除后缀
- 替换后缀
- 迁移规则(源数据规则)
-
迁移前评估
-
迁移任务启动配置
-
高级任务设置
-
标签
7.事件订阅
- 可以针对数据迁移实例和迁移任务配置事件邮件(短信)通知
参考文档:
https://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL.html
https://docs.aws.amazon.com/zh_cn/dms/latest/userguide/CHAP_Source.MySQL.html
https://docs.aws.amazon.com/zh_cn/dms/latest/userguide/CHAP_Target.Elasticsearch.html
https://docs.aws.amazon.com/zh_cn/dms/latest/userguide/CHAP_Reference.DataTypes.html