Ajustement pour le paramètre de fuseau horaire par défaut sur RDS
Nous avons récemment passé à un RDS instance et a remarqué que le tas de nos tâches de base de données ont été prise en déclenchée 4 heures plus tôt que nécessaire. Sur l'investigation plus loin, le problème est causé par le temps par défaut de la zone de réglage (UTC) sur le RDS instance. Depuis ce paramètre ne peut pas être modifié, nous tenons à résoudre le problème au niveau du code à l'échelle mondiale à travers l'ensemble de nos applications à l'aide de cette instance de base de données. J'ai essayé de définir le fuseau horaire sur l'instance db j'ai créer pour "US/Eastern' en utilisant
set GLOBAL time_zone = 'US/Eastern'" OR
set time_zone = 'US/Eastern'"
Mais qui génère un message d'erreur "erreur de Base de données: Inconnu ou incorrect fuseau horaire: 'US/Eastern'"
Ce que vous pensez que je fais de mal ici? Personne ne l'a utilisé d'autres solutions ?
source d'informationauteur newbie
Vous devez vous connecter pour publier un commentaire.
Malheureusement il n'est pas possible de régler la default_timezone dans la base de données RDS ParameterGroups de sorte que votre tentative a été la bonne direction déjà.
Pour définir la valeur globale via SET GLOBAL, vous devez avoir le SUPER privilège qui n'est accordé à vous en tant qu'utilisateur RDS.
La seule façon de définir la time_zone est sur une base de connexion
Sur mes machines, j'ai essayé US/Eastern avec succès mais j'ai une très vieille génération en cours d'exécution.
Pour déterminer les fuseaux horaires disponibles journal dans votre boîte de
et le type
Vous devriez obtenir une liste d'installé et valide le fuseau horaire noms que vous pouvez configurer sur votre instance
Vous devez définir le time_zone chaque fois que vous vous connectez à votre serveur de base de données
Par exemple, si vous utilisez php extension Mysqli vous pouvez le faire
Sinon, manuellement ( en termes de laisser votre connecteur de base de données le faire ) exécuter le
SET time_zone = '<YOUR_DESIRED_TIMEZONE>'
Requête droit après que vous avez connecté à votre base de donnéesLa time_zone réglage de RDS instances de base de données peuvent désormais être modifiées: https://aws.amazon.com/de/premiumsupport/knowledge-center/rds-change-time-zone/
tldr;
De créer un "partage" schéma que tous vos utilisateurs ont accès EXÉCUTER, créer une procédure stockée qui modifie la session de fuseau horaire et de modifier le init_connect MySQL paramètre d'appel.
Comme Ryan Weir a souligné dans son excellent répondre à une double questioncela doit être évité si possible. Si, toutefois, vous êtes comme moi et que vous souhaitez mettre en œuvre pour des raisons de commodité et de santé mentale puis j'ai pris de Ryan solution et a fait quelques modifications.
Si vous avez plusieurs utilisateurs de l'installation de MySQL avec différentes autorisations puis il suffit de mettre la procédure stockée dans la base de données mysql schéma peut avoir des problèmes. Pour résoudre cela, j'ai créé un nouveau schéma appelé "partagé" et a donné tous mes utilisateurs d'EXÉCUTER l'accès à ce schéma. Ensuite, j'ai créé la procédure stockée suivante.
Je préfère set "US/Pacifique" à la poignée de l'heure d'été, mais vous devez tester pour vous assurer que votre instance MySQL reconnaît d'abord. Exécuter la requête suivante
SET SESSION time_zone = 'US/Pacific';
pour vérifier qu'il fonctionne. Pour rechercher votre fuseau horaire exécuterSELECT * FROM mysql.time_zone_name;
À ce point, je recommande de tester les autorisations avant d'aller modifier le paramètre de groupe et le potentiel de tout casser. Il suffit de connecter à la DB (de préférence avec un utilisateur qui a un faible niveau d'autorisations et/ou est couramment utilisé) et exécuter les requêtes suivantes.
J'espère que vous n'obtenez pas toutes les erreurs et de les corriger temps ont.
Ensuite, vous aurez besoin de modifier le init_connect paramètre dans la base de données Groupe de paramètres que votre RDS, l'instance de l'aide. Vous pouvez le faire dans le RDS de la console web, par le biais de l'API ou de l'utilitaire de ligne de commande. Si vous utilisez la ligne de commande, il ressemblera à ceci:
Si vous le faites par le biais de la console web, alors vous avez juste besoin de modifier la valeur de init_connect.
Revenir à votre RDS exemple dans la console web et faites défiler le volet de détails en bas de la DB, Groupe de paramètres. Il devrait dire quelque chose comme (l'application) ou (synchro). Une fois qu'il est (in-sync) aller tout tester pour s'assurer qu'il ya pas de problèmes.
À ce point, si vous avez un problème et besoin de rouler des choses à l'époque, je vous recommandons de régler la init_connect de la valeur à quelque chose d'inoffensif comme:
Paramètre de retour à vide est impossible à faire à partir de la console web. Voir ce fil de discussion pour plus de détails sur les raisons de l'un ne pouvez pas restaurer le vide de la valeur pour le paramètre DB
@Thomas Paine solution qui fonctionne pour moi, sauf que j'avais à l'utilisateur
user()
au lieu decurrent_user()
comme à l'intérieur du contexte deinit_connect
current_user() retourne le maître RDS utilisateur. (Par le maître, je ne veux pas rdsadmin qui est la vraie racine de l'utilisateur, mais l'utilisateur créé à l'instance de base de données avec plus de privilèges.)J'ai fait les étapes suivantes, de Sorte que je pouvais changer le fuseau horaire
de connexion à RDS et de Créer un Nouveau Groupe de paramètres.
Modifier le nouveau Groupe de paramètres
Set time_zone Ex:Asia/Calcutta et d'Enregistrer les Modifications
Modifier RDS exemple, le changement de la DB Paramètre Groupe nouvellement créé paramètre groupe
Enregistrer Et Redémarrer RDS instance