Mysql
 sql >> Database >  >> RDS >> Mysql

Come impostare il fuso orario del database per un'istanza AWS RDS

Prima del resto della mia risposta, vorrei solo raccomandare in questo momento che se hai qualche opzione per modificare la tua applicazione per utilizzare UTC ti farà risparmiare un sacco di dolore ora e in futuro.

Tuttavia, dato il contesto della tua domanda, presumo che questa non sia un'opzione e che stai adattando un sistema progettato per utilizzare MySQL in un ambiente server tradizionale in cui puoi semplicemente cambiare il fuso orario e che c'è una logica di codice che prevede questo fuso orario e non può essere facilmente adattato per utilizzare UTC.

Ma se hai davvero bisogno che venga archiviato come PST, continua a leggere.

Hai ragione sul fatto che mySql utilizzerà il fuso orario del server per l'archiviazione del timestamp per impostazione predefinita, tuttavia la tua ipotesi che le istanze RDS abbiano i fusi orari impostati in base alla regione AWS in cui vengono avviate non è corretta - tutte le istanze RDS vengono avviate con il fuso orario impostato come UTC, e questa configurazione può non essere modificato:

Quindi l'unica opzione è impostare il fuso orario su ogni connessione effettuata dall'applicazione all'istanza del database su PST. Puoi utilizzare SET SESSION time_zone = 'PST' query da eseguire in ogni connessione effettuata da un'applicazione seguendo i due passaggi trovati qui :

  1. Crea la seguente procedura memorizzata (UTC-8 è PST):

  2. Connettiti alla tua istanza ed esegui il seguente comando:

  3. Potrebbe essere necessario concedere EXECUTE autorizzazioni agli utenti che si connetteranno al database, altrimenti potresti ricevere un errore di connessione:

Ora ogni query eseguita sull'istanza RDS da qualsiasi client dovrebbe utilizzare PST senza modificare la logica dell'applicazione e senza dover aggiornare i timestamp precedentemente archiviati nel database.