Come posso utilizzare le attività AWS DMS per eseguire la migrazione di un database MySQL in un fuso orario non UTC?
Ho un'istanza MySQL di origine e di destinazione che si trova in un fuso orario non UTC. Desidero utilizzare un'attività AWS Database Migration Service (AWS DMS) per eseguire la migrazione del database.
Breve descrizione
Se le istanze MySQL di origine e di destinazione utilizzano un fuso orario non UTC, i dati del timestamp possono essere incoerenti. Internamente, MySQL memorizza la colonna timestamp come UTC. Tuttavia, quando selezioni una data, MySQL converte automaticamente la colonna timestamp nel fuso orario della sessione corrente.
Ad esempio, hai un database MySQL di origine e di destinazione che viene eseguito nel fuso orario US/Pacific. I dati diventano incoerenti quando l'attività DMS acquisisce e applica i dati come UTC nell'origine alla destinazione.
Per risolvere il problema, utilizza l'impostazione dell'endpoint ServerTimezone nell'endpoint di origine. Imposta il valore sul fuso orario del database MySQL.
Esempio di impostazione dell'endpoint ServerTimezone:
ServerTimezone=US/Pacific
Risoluzione
Migrazione senza l'impostazione ServerTimezone nell'endpoint di origine
Il seguente esempio di database di origine non include l'impostazione ServerTimezone nell'endpoint di origine:
mysql> SELECT @@global.time_zone, @@session.time_zone; +--------------------+---------------------+ | @@global.time_zone | @@session.time_zone | +--------------------+---------------------+ | US/Pacific | US/Pacific | +--------------------+---------------------+ mysql> create table test_tz ( id int primary key,t_date timestamp); Query OK, 0 rows affected (0.28 sec) mysql> insert into test_tz values (10, now()); Query OK, 1 row affected (0.31 sec) mysql> select * from test_tz; +----+---------------------+ | id | t_date | +----+---------------------+ | 10 | 2022-06-27 20:50:29 | +----+---------------------+ 1 row in set (0.25 sec)
Il seguente esempio è il database di origine dopo che crei un'attività DMS, esegui la migrazione dei dati e l'attività carica completamente i dati:
mysql> SELECT @@global.time_zone, @@session.time_zone; +--------------------+---------------------+ | @@global.time_zone | @@session.time_zone | +--------------------+---------------------+ | US/Pacific | US/Pacific | +--------------------+---------------------+ 1 row in set (0.30 sec) mysql> select * from test_tz; +----+---------------------+ | id | t_date | +----+---------------------+ | 10 | 2022-06-28 03:50:29 | +----+---------------------+ 1 row in set (0.25 sec)
Il timestamp è in UTC.
Esegui un inserimento nel database di origine:
mysql> insert into test_tz values (11, now());Query OK, 1 row affected (0.38 sec) mysql> select * from test_tz; +----+---------------------+ | id | t_date | +----+---------------------+ | 10 | 2022-06-27 20:50:29 | | 11 | 2022-06-27 21:10:13 | +----+---------------------+ 2 rows in set (0.24 sec)
Esempio di destinazione:
mysql> select * from test_tz; +----+---------------------+ | id | t_date | +----+---------------------+ | 10 | 2022-06-28 03:50:29 | | 11 | 2022-06-28 04:10:13 | +----+---------------------+ 2 rows in set (0.25 sec)
Il timestamp è ancora in UTC.
Migrazione con l'impostazione ServerTimezone nell'endpoint di origine
I seguenti esempi sono un'origine e una destinazione completamente caricate quando utilizzi l'impostazione ServerTimezone nell'endpoint di origine.
Esempio di origine:
mysql> select * from test_tz; +----+---------------------+ | id | t_date | +----+---------------------+ | 10 | 2022-06-27 20:50:29 | | 11 | 2022-06-27 21:10:13 | +----+---------------------+
Esempio di destinazione:
mysql> select * from test_tz; +----+---------------------+ | id | t_date | +----+---------------------+ | 10 | 2022-06-27 20:50:29 | | 11 | 2022-06-27 21:10:13 | +----+---------------------+
Dati durante l'acquisizione dei dati di modifica (CDC)
Quando replichi i dati del timestamp per un'istanza MySQL di origine che utilizza un fuso orario non UTC, utilizza l'impostazione ServerTimezone durante l'acquisizione dei dati di modifica (CDC).
Esempio di origine:
mysql> insert into test_tz values (12, current_time()); Query OK, 1 row affected (0.38 sec) mysql> mysql> mysql> select * from test_tz; +----+---------------------+ | id | t_date | +----+---------------------+ | 10 | 2022-06-27 20:50:29 | | 11 | 2022-06-27 21:10:13 | | 12 | 2022-06-27 21:12:06 | +----+---------------------+ 3 rows in set (0.25 sec)
Esempio di destinazione:
mysql> select * from test_tz; +----+---------------------+ | id | t_date | +----+---------------------+ | 10 | 2022-06-27 20:50:29 | | 11 | 2022-06-27 21:10:13 | | 12 | 2022-06-27 21:12:06 | +----+---------------------+ 3 rows in set (0.25 sec)
Informazioni correlate
The DATE, DATETIME, and TIMESTAMP Types (Tipi di DATE, DATETIME e TIMESTAMP) sul sito web di MySQL
- Argomenti
- Migrazione e modernizzazione
- Lingua
- Italiano
