AWS - DMS - 迁移 MySQL 时由于时区导致的数据验证错误

通过 AWS DMS 迁移 MySQL 时由于时区导致的数据验证错误, 查看DMS 执行。

如何查看 AWS DMS 到底做了些什么,或者执行了哪些语句?
我们可以在配置 DMS任务时,开启日志的 Debug 模式。
并且将数据库的日志模式设置为最高。 比如 MySQL 中开启 general_log.

如果数据库中的时区设置不为 UTC。
那么当表中使用 timestamp 时, DMS 做 validation 就会有问题。
这是因为 valiedation 时, 对 源库 的连接会自动使用 UTC 的设置,而对 目标库 的连接不会增加这个设置,所以在 awsdms_control.awsdms_validation_failures_v1 表中会看到时间不一致。

解决问题的办法就是将对目标端的连接也设置为 UTC。 这样在比对时就不会出现不一致的情况。

源端连接

onnecting to MySQL through ODBC connection string: DRIVER={MySQL ODBC 8.0 Unicode Driver};SERVER=source.rds.cn-northwest-1.amazonaws.com.cn;port=3306;UID=dbadmin;PWD=***;DB=;CHARSET=binary;initstmt=SET time_zone='+00:00';Option=74448896;NO_LOCALE=1;  (mysql_endpoint_imp.c:692)

目标端连接

Going to connect to ODBC connection string: DRIVER={MySQL ODBC 8.0 Unicode Driver};SERVER=target.rds.cn-northwest-1.amazonaws.com.cn;PORT=3306;FOUND_ROWS=1;CHARSET=binary;NO_LOCALE=1;ENABLE_LOCAL_INFILE=1;initstmt=SET time_zone=UTC;UID=dbadmin;

在终端节点的目标节点设置中,将 额外的连接属性添加以下的值
initstmt=SET time_zone=UTC

从mysql 的general log 中查看执行语句。

Connect	[email protected] on  using SSL/TLS
Query	SET time_zone=UTC
Query	SET NAMES utf8
Query	SET character_set_results = NULL
Query	SET SQL_AUTO_IS_NULL = 0
Query	select database()
Query	SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED
Query	set @@max_execution_time=900000
Query	set @@sql_select_limit=1
Query	SELECT  `id` ,  date_format(`idate`, '%Y-%m-%d') FROM `testdb`.`test02` WHERE `id` IN ( 10 , 11 , 30 , 12 , 31 , 13 , 32 , 14 , 50 , 33 , 15 , 34 , 16 , 17 , 35 , 18 , 36 , 19 , 37 , 38 , 39 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 20 , 21 , 22 , 40 , 23 , 41 , 24 , 42 , 25 , 43 , 26 , 44 , 27 , 45 , 28 , 46 , 29 , 47 , 48 , 49 )  ORDER BY `id` ASC
Query	set @@sql_select_limit=DEFAULT
Query	SELECT  `id` ,  date_format(`idate`, '%Y-%m-%d') FROM `testdb`.`test02` WHERE `id` IN ( 10 , 11 , 30 , 12 , 31 , 13 , 32 , 14 , 50 , 33 , 15 , 34 , 16 , 17 , 35 , 18 , 36 , 19 , 37 , 38 , 39 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 20 , 21 , 22 , 40 , 23 , 41 , 24 , 42 , 25 , 43 , 26 , 44 , 27 , 45 , 28 , 46 , 29 , 47 , 48 , 49 )  ORDER BY `id` ASC

你可能感兴趣的:(AWS-DMS)