Saltar al contenido

¿Cómo utilizo las tareas de AWS DMS para migrar una base de datos de Amazon RDS para MySQL que no utiliza una zona horaria UTC?

7 minutos de lectura
0

Tengo una base de datos de Amazon Relational Database Service (Amazon RDS) de origen y destino para una base de datos MySQL que no utiliza una zona horaria UTC. Quiero usar una tarea de AWS Database Migration Service (AWS DMS) para migrar la base de datos.

Descripción corta

Si tu instancia de base de datos de RDS para MySQL de origen o destino no utiliza una zona horaria UTC, los datos de tu marca de tiempo pueden ser incoherentes tras la migración de AWS DMS. Internamente, RDS para MySQL almacena la columna de marca de tiempo como UTC. Al seleccionar una fecha, RDS para MySQL convierte automáticamente la columna de marca de tiempo en la zona horaria de la sesión actual.

Por ejemplo, tienes una base de datos de origen de RDS para MySQL que se ejecuta en Australia/Sídney y una base de datos de destino de RDS para MySQL que se ejecuta en UTC. Cuando la tarea de AWS DMS captura y aplica los datos como UTC del origen al destino, los datos se vuelven incoherentes.

Para resolver este problema, utiliza el atributo de conexión adicional (ECA) Initstmt=SET time_zone='+00:00'; para el punto de enlace de destino de AWS DMS. Para obtener más información, consulta Paso 6: Create AWS DMS source and target endpoints (Paso 6: creación de puntos de enlace de origen y destino de AWS DMS).

Resolución

Importante: Antes de migrar los datos, debes ejecutar un comando CREATE TABLE para la tarea de AWS DMS. Para obtener más información, consulta CREATE TABLE statement (Instrucción CREATE TABLE) en el sitio web de MySQL.

Ejemplo del 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;

Migración sin el ECA Initstmt en el punto de enlace de destino

En el siguiente ejemplo, la base de datos de origen está en la zona horaria de Australia/Sídney y la base de datos de destino está en la zona horaria de América/Caracas. Además, la base de datos de origen no incluye el ECA Initstmt en el punto de enlace de destino.

Para comprobar los parámetros de las bases de datos de origen y destino, ejecuta la siguiente consulta:

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

Salida de la base de datos de origen:

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

Salida de la base de datos de destino:

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

Para preparar los datos para una carga completa, ejecuta los siguientes 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');

Ejecuta tu tarea de AWS DMS a plena carga y cambia el modo de captura de datos (CDC). Una vez completada la carga completa, ejecuta los siguientes comandos para insertar los datos de CDC en la base de datos de origen:

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 comprobar los datos de las bases de datos de origen y destino, ejecuta la siguiente consulta SQL en las bases de datos de origen y destino:

select t.* from sample_schema.dms_tz_table t;

El siguiente resultado muestra los datos de las bases de datos de origen y 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|

Los datos de la marca de tiempo no son coherentes entre las bases de datos de origen y destino.

Migración con el ECA Initstmt en el punto de enlace de destino

En el siguiente ejemplo, la base de datos de origen está en la zona horaria de Australia/Sídney y la base de datos de destino está en la zona horaria de América/Caracas. La base de datos de origen incluye el ECA Initstmt=SET time_zone='+00:00'; en el punto de enlace de destino de AWS DMS.

Para comprobar los parámetros de las bases de datos de origen y destino, ejecuta la siguiente consulta:

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

Salida de la base de datos de origen:

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

Salida de la base de datos de destino:

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

Para preparar los datos para una carga completa, ejecuta los siguientes 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');

Ejecuta tu tarea de AWS DMS en modo de carga completa más CDC. Una vez completada la carga completa, ejecuta los siguientes comandos para insertar los datos de CDC en la base de datos de origen:

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 comprobar los datos de las bases de datos de origen y destino, ejecuta la siguiente consulta SQL en las bases de datos de origen y destino:

select t.* from sample_schema.dms_tz_table t;

El siguiente resultado muestra los datos de las bases de datos de origen y 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|

Migración con el ECA Initstmt en el punto de enlace de destino con una base de datos de destino en la zona horaria UTC

En el siguiente ejemplo, la base de datos de origen está en la zona horaria de Australia/Sídney y la base de datos de destino está en la zona horaria UTC. La base de datos de origen incluye el ECA Initstmt=SET time_zone='+00:00'; en el punto de enlace de destino de AWS DMS.

Para comprobar los parámetros de las bases de datos de origen y destino, ejecuta la siguiente consulta:

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

Salida de la base de datos de origen:

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

Salida de la base de datos de destino:

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

Para preparar los datos para una carga completa, ejecuta los siguientes 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');

Ejecuta tu tarea de AWS DMS en modo de carga completa más CDC. Una vez completada la carga completa, ejecuta los siguientes comandos para insertar los datos de CDC en la base de datos de origen:

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 comprobar los datos de las bases de datos de origen y destino, ejecuta la siguiente consulta SQL en las bases de datos de origen y destino:

select t.* from sample_schema.dms_tz_table t;

El siguiente resultado muestra los datos de las bases de datos de origen y 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|

Información relacionada

Configuración del punto de enlace cuando se utiliza una base de datos compatible con MySQL como destino para AWS DMS

OFICIAL DE AWSActualizada hace 6 meses