Salta al contenuto

Come posso utilizzare attività AWS DMS per migrare un database Amazon RDS per MySQL che non utilizza un fuso orario UTC?

6 minuti di lettura
0

Ho un database Amazon Relational Database Service (Amazon RDS) di origine e di destinazione per MySQL che non utilizza un fuso orario UTC. Desidero utilizzare un'attività AWS Database Migration Service (AWS DMS) per eseguire la migrazione del database.

Breve descrizione

Se l'istanza database RDS per MySQL di origine o di destinazione non utilizza un fuso orario UTC, i dati del timestamp possono essere incoerenti dopo la migrazione di AWS DMS. Internamente, RDS per MySQL memorizza la colonna timestamp come UTC. Quando selezioni una data, RDS per MySQL converte automaticamente la colonna timestamp nel fuso orario della sessione corrente.

Ad esempio, hai un database RDS per MySQL di origine che viene eseguito in Australia/Sydney e un database RDS di destinazione per MySQL che viene eseguito in UTC. Quando l'attività AWS DMS acquisisce e applica i dati come UTC dall'origine alla destinazione, i dati non sono coerenti.

Per risolvere questo problema, utilizza l’attributo di connessione extra (ECA) Initstmt=SET time_zone='+00:00'; per l'endpoint di destinazione di AWS DMS. Per ulteriori informazioni, consulta Step 6: Create AWS DMS source and target endpoints (Passaggio 6: crea endpoint di origine e di destinazione di AWS DMS).

Risoluzione

Importante: prima di eseguire la migrazione dei dati, devi eseguire un comando CREATE TABLE per l'attività AWS DMS. Per ulteriori informazioni, consulta CREATE TABLE statement (Istruzione CREATE TABLE) sul sito web MySQL.

Esempio di 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;

Migrazione senza ECA Initstmt nell'endpoint di destinazione

Nell'esempio seguente, il database di origine si trova nel fuso orario Australia/Sydney, mentre il database di destinazione si trova nel fuso orario America/Caracas. Inoltre, il database di origine non include l'ECA Initstmt nell'endpoint di destinazione.

Per controllare i parametri del database di origine e di destinazione, esegui questa query:

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

Output del database di origine:

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

Output del database di destinazione:

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

Per preparare i dati per un carico completo, esegui questi comandi:

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');

Esegui l'attività AWS DMS in modalità caricamento completo e acquisizione dei dati di modifica (CDC). Una volta completato il caricamento completo, esegui questi comandi per inserire i dati CDC nel database di origine:

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');

Per controllare i dati nei database di origine e di destinazione, esegui questa query SQL sia nel database di origine che in quello di destinazione:

select t.* from sample_schema.dms_tz_table t;

L'output seguente mostra i dati dei database di origine e di destinazione:

|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|

I dati del timestamp non sono coerenti tra i database di origine e di destinazione.

Migrazione con ECA Initstmt nell'endpoint di destinazione

Nell'esempio seguente, il database di origine si trova nel fuso orario Australia/Sydney, mentre il database di destinazione si trova nel fuso orario America/Caracas. Il database di origine include l'ECA Initstmt=SET time_zone='+00:00'; nell'endpoint di destinazione di AWS DMS.

Per controllare i parametri del database di origine e di destinazione, esegui questa query:

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

Output del database di origine:

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

Output del database di destinazione:

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

Per preparare i dati per un carico completo, esegui questi comandi:

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');

Esegui l'attività AWS DMS in modalità caricamento completo e CDC. Una volta completato il caricamento completo, esegui questi comandi per inserire i dati CDC nel database di origine:

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');

Per controllare i dati nei database di origine e di destinazione, esegui questa query SQL sia nel database di origine che in quello di destinazione:

select t.* from sample_schema.dms_tz_table t;

L'output seguente mostra i dati dei database di origine e di destinazione:

|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|

Migrazione con ECA Initstmt nell'endpoint di destinazione per un database di destinazione nel fuso orario UTC

Nell'esempio seguente, il database di origine si trova nel fuso orario Australia/Sydney, mentre il database di destinazione si trova nel fuso orario UTC. Il database di origine include l'ECA Initstmt=SET time_zone='+00:00'; nell'endpoint di destinazione di AWS DMS.

Per controllare i parametri del database di origine e di destinazione, esegui questa query:

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

Output del database di origine:

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

Output del database di destinazione:

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

Per preparare i dati per un carico completo, esegui questi comandi:

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');

Esegui l'attività AWS DMS in modalità caricamento completo e CDC. Una volta completato il caricamento completo, esegui questi comandi per inserire i dati CDC nel database di origine:

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');

Per controllare i dati nei database di origine e di destinazione, esegui questa query SQL sia nel database di origine che in quello di destinazione:

select t.* from sample_schema.dms_tz_table t;

L'output seguente mostra i dati dei database di origine e di destinazione:

|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|

Informazioni correlate

Impostazioni degli endpoint quando si utilizza un database compatibile con MySQL come destinazione per AWS DMS

AWS UFFICIALEAggiornata 7 mesi fa