Ir para o conteúdo

Como faço para usar tarefas do AWS DMS para migrar um banco de dados do Amazon RDS para MySQL que não usa um fuso horário UTC?

7 minuto de leitura
0

Eu tenho um banco de dados de origem e destino do Amazon Relational Database Service (Amazon RDS) para MySQL que não usa um fuso horário UTC. Quero usar uma tarefa do AWS Database Migration Service (AWS DMS) para migrar o banco de dados.

Breve descrição

Se sua instância de banco de dados do RDS para MySQL de origem ou de destino não usa um fuso horário UTC, seus dados de carimbo de data e hora podem ficar inconsistentes após a migração do AWS DMS. Internamente, o RDS para MySQL armazena a coluna de carimbo de data e hora como UTC. Quando você seleciona uma data, o RDS para MySQL converte automaticamente a coluna de carimbo de data e hora para o fuso horário da sessão atual.

Por exemplo, você tem um banco de dados de origem do RDS para MySQL que é executado em Sydney/Austrália e um banco de dados de destino do RDS para MySQL que é executado em UTC. Quando a tarefa do AWS DMS captura e aplica os dados como UTC na origem até o destino, os dados ficam inconsistentes.

Para resolver esse problema, use o atributo de conexão extra (ECA) Initstmt=SET time_zone='+00:00'; para o endpoint de destino do AWS DMS. Para obter mais informações, consulte a Etapa 6: Criar endpoints de origem e destino no AWS DMS.

Resolução

Importante: antes de migrar dados, você deve executar um comando CREATE TABLE para sua tarefa do AWS DMS. Para obter mais informações, consulte CREATE TABLE statement no site do MySQL.

Exemplo do comando CREATE TABLE:

create table sample_schema.dms_tz_table (
id int not null,
info varchar(30),
ts timestamp null default null,
primary key (id)
) engine=innodb default charset=utf8mb4 collate=utf8mb4_0900_ai_ci;

Migração sem o ECA Initstmt no endpoint de destino

No exemplo a seguir, o banco de dados de origem está no fuso horário de Sydney/Austrália e o banco de dados de destino está no fuso horário de Caracas/América. Além disso, o banco de dados de origem não inclui o ECA Initstmt no endpoint de destino.

Para verificar os parâmetros do banco de dados de origem e destino, execute a seguinte consulta:

SELECT @@global.time_zone, @@session.time_zone;

Saída do banco de dados de origem:

@@global.time_zone|@@session.time_zone|
------------------+-------------------+
Australia/Sydney  |Australia/Sydney   |

Saída do banco de dados de destino:

@@global.time_zone|@@session.time_zone|
------------------+-------------------+
America/Caracas   |America/Caracas    |

Para preparar os dados para uma carga completa, execute os seguintes comandos:

insert into sample_schema.dms_tz_table(id, info, ts) values(1, 'FL', CURRENT_TIMESTAMP);
insert into sample_schema.dms_tz_table(id, info, ts) values(2, 'FL','2025-12-18 19:03:01');

Execute sua tarefa do AWS DMS em carga total, além do modo de captura de dados de alteração (CDC). Depois que a carga completa for concluída, execute os seguintes comandos para inserir os dados do CDC em seu banco de dados de origem:

insert into sample_schema.dms_tz_table(id, info, ts) values(3, 'CDC', CURRENT_TIMESTAMP);
insert into sample_schema.dms_tz_table(id, info, ts) values(4, 'CDC', '2025-09-01 19:05:01');

Para verificar os dados em seus bancos de dados de origem e destino, execute a seguinte consulta SQL nos bancos de dados de origem e de destino:

select t.* from sample_schema.dms_tz_table t;

A saída a seguir mostra os dados dos bancos de dados de origem e destino:

|Source Australia/Sydney    |     Target America/Caracas|
|-------------------------------------------------------|
|id|info|                 ts|id|info|                 ts|
|--+----+-------------------+--+----+-------------------+
|1 |FL  |2025-12-19 02:12:47|1 |FL  |2025-12-18 15:12:47|
|2 |FL  |2025-12-18 19:03:01|2 |FL  |2025-12-18 08:03:01|
|3 |CDC |2025-12-19 02:17:40|3 |CDC |2025-12-18 11:17:40|
|4 |CDC |2025-09-01 19:05:01|4 |CDC |2025-09-01 05:05:01|

Os dados do carimbo de data e hora não são consistentes entre os bancos de dados de origem e de destino.

Migração com o ECA Initstmt no endpoint de destino

No exemplo a seguir, o banco de dados de origem está no fuso horário de Sydney/Austrália e o banco de dados de destino está no fuso horário de Caracas/América. O banco de dados de origem inclui o ECA Initstmt=SET time_zone='+00:00'; no endpoint de destino do AWS DMS

Para verificar os parâmetros do banco de dados de origem e destino, execute a seguinte consulta:

SELECT @@global.time_zone, @@session.time_zone;

Saída do banco de dados de origem:

@@global.time_zone|@@session.time_zone|
------------------+-------------------+
Australia/Sydney  |Australia/Sydney   |

Saída do banco de dados de destino:

@@global.time_zone|@@session.time_zone|
------------------+-------------------+
America/Caracas   |America/Caracas    |

Para preparar os dados para uma carga completa, execute os seguintes comandos:

insert into sample_schema.dms_tz_table(id, info, ts) values(1, 'FL', CURRENT_TIMESTAMP);
insert into sample_schema.dms_tz_table(id, info, ts) values(2, 'FL','2025-09-01 19:03:01');

Execute sua tarefa do AWS DMS em carga total, além do modo CDC. Depois que a carga completa for concluída, execute os seguintes comandos para inserir os dados do CDC em seu banco de dados de origem:

insert into sample_schema.dms_tz_table(id, info, ts) values(3, 'CDC', CURRENT_TIMESTAMP);
insert into sample_schema.dms_tz_table(id, info, ts) values(4, 'CDC', '2025-09-01 19:05:01');

Para verificar os dados em seus bancos de dados de origem e destino, execute a seguinte consulta SQL nos bancos de dados de origem e de destino:

select t.* from sample_schema.dms_tz_table t;

A saída a seguir mostra os dados dos bancos de dados de origem e destino:

|Source Australia/Sydney    |     Target America/Caracas|
|-------------------------------------------------------|
|id|info|                 ts|id|info|                 ts|
|--+----+-------------------+--+----+-------------------+
|1 |FL  |2025-09-03 00:44:31|1 |FL  |2025-09-02 10:44:31|
|2 |FL  |2025-09-01 19:03:01|2 |FL  |2025-09-01 05:03:01|
|3 |CDC |2025-09-03 00:48:15|3 |CDC |2025-09-02 10:48:15|
|4 |CDC |2025-09-01 19:05:01|4 |CDC |2025-09-01 05:05:01|

Migração com o ECA Initstmt no endpoint de destino com um banco de dados de destino no fuso horário UTC

No exemplo a seguir, o banco de dados de origem está no fuso horário de Sydney/Austrália e o banco de dados de destino está no fuso horário UTC. O banco de dados de origem inclui o ECA Initstmt=SET time_zone='+00:00'; no endpoint de destino do AWS DMS.

Para verificar os parâmetros do banco de dados de origem e destino, execute a seguinte consulta:

SELECT @@global.time_zone, @@session.time_zone;

Saída do banco de dados de origem:

@@global.time_zone|@@session.time_zone|
------------------+------------------+
Australia/Sydney  |Australia/Sydney  |

Saída do banco de dados de destino:

@@global.time_zone|@@session.time_zone|
------------------+------------------+
UTC               |UTC               |

Para preparar os dados para uma carga completa, execute os seguintes comandos:

insert into sample_schema.dms_tz_table(id, info, ts) values(1, 'FL', CURRENT_TIMESTAMP);
insert into sample_schema.dms_tz_table(id, info, ts) values(2, 'FL','2025-09-01 19:03:01');

Execute sua tarefa do AWS DMS em carga total, além do modo CDC. Depois que a carga completa for concluída, execute os seguintes comandos para inserir os dados do CDC em seu banco de dados de origem:

insert into sample_schema.dms_tz_table(id, info, ts) values(3, 'CDC', CURRENT_TIMESTAMP);
insert into sample_schema.dms_tz_table(id, info, ts) values(4, 'CDC', '2025-09-01 19:05:01');

Para verificar os dados em seus bancos de dados de origem e destino, execute a seguinte consulta SQL nos bancos de dados de origem e de destino:

select t.* from sample_schema.dms_tz_table t;

A saída a seguir mostra os dados dos bancos de dados de origem e destino:

|Source Australia/Sydney    |                 Target UTC|
|-------------------------------------------------------|
|id|info|                 ts|id|info|                 ts|
|--+----+-------------------+--+----+-------------------+
|1 |FL  |2025-09-03 01:02:09|1 |FL  |2025-09-02 15:02:09|
|2 |FL  |2025-09-01 19:03:01|2 |FL  |2025-09-01 09:03:01|
|3 |CDC |2025-09-03 01:03:37|3 |CDC |2025-09-02 15:03:37|
|4 |CDC |2025-09-01 19:05:01|4 |CDC |2025-09-01 09:05:01|

Informações relacionadas

Configurações de endpoint ao usar um banco de dados compatível com MySQL como destino para o AWS DMS

AWS OFICIALAtualizada há 6 meses