在AWS DMS中,Bulk Load和CDC是数据迁移期间使用的两种方法。在使用它们时,可能会遇到数据不匹配的情况。其中一个可能的问题是,使用Bulk Load时,数据的类型可能与CDC中源数据库中的类型不匹配。
解决此问题的一种方法是在MySQL源数据库上运行以下查询:
SELECT * FROM mysql.columns_priv WHERE 1=0;
这将返回一个结果集,其中包含三个包含列数据类型的字段。这些字段是:'Host','Db','User'。您可以将此查询与SQL Workbench或其他查询工具一起使用。
现在,请将以下脚本保存到本地目录中并使用AWS命令行接口(AWS CLI)执行此脚本:
$ aws dms create-endpoint --endpoint-identifier mysql-endpoint --endpoint-type source --engine-name mysql --database-name mysql --server-name endpoint-host.mysql.us-west-2.rds.amazonaws.com --port 3306 --username endpoint-user --password password
变量endpoint-host.mysql.us-west-2.rds.amazonaws.com和password应替换为您的MySQL实例的主机和凭据。
接下来,请将以下脚本保存到本地目录中并使用AWS CLI执行此脚本:
$ aws dms create-replication-task --replication-task-identifier repl-task --source-endpoint-arn arn:aws:dms:us-west-2:123456789012:endpoint:mysql-endpoint --target-endpoint-arn arn:aws:dms:us-west-2:123456789012:endpoint:s3-endpoint --replication-instance-arn arn:aws:dms:us-west-2:123456789012:rep:repinst --migration-type full-load-and-cdc --table-mappings file://mappings.json
比如,对于上面的示例代码,如果在S3端点中有类型为INT(18)的列,则需要将MySQL源数据库中具有类型为BIGINT(20)的相应列