Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment définir le fuseau horaire de la base de données pour une instance AWS RDS

Avant le reste de ma réponse, je voudrais juste recommander dès maintenant que si vous avez la possibilité de modifier votre application pour utiliser UTC, cela vous évitera beaucoup de soucis maintenant et à l'avenir.

Cependant, étant donné le contexte de votre question, je suppose que ce n'est pas une option et que vous adaptez un système conçu pour utiliser MySQL dans un environnement de serveur traditionnel où vous pouvez simplement changer le fuseau horaire, et qu'il existe une logique de code qui attend ce fuseau horaire et ne peut pas être facilement adapté pour utiliser UTC.

Mais si vous en avez vraiment besoin pour stocker en tant que PST, lisez la suite.

Vous avez raison de dire que mySql utilisera le fuseau horaire du serveur pour le stockage de l'horodatage par défaut, mais votre hypothèse selon laquelle les instances RDS ont leurs fuseaux horaires définis en fonction de la région AWS dans laquelle elles sont lancées est incorrecte - toutes les instances RDS sont lancées avec leur fuseau horaire défini sur UTC, et cette configuration peut ne doit pas être modifié :

Votre seule option consiste donc à définir le fuseau horaire sur chaque connexion que votre application établit avec l'instance de base de données vers PST. Vous pouvez utiliser le SET SESSION time_zone = 'PST' requête à exécuter dans chaque connexion établie par une application en suivant les deux étapes trouvées ici :

  1. Créez la procédure stockée suivante (UTC-8 est PST) :

  2. Connectez-vous à votre instance et exécutez la commande suivante :

  3. Vous devrez peut-être accorder EXECUTE autorisations aux utilisateurs qui se connecteront à la base de données, sinon vous risquez d'obtenir une erreur de connexion :

Désormais, chaque requête exécutée sur votre instance RDS par n'importe quel client doit utiliser PST sans modifier la logique de l'application et sans avoir besoin de mettre à jour les horodatages précédemment stockés dans la base de données.