Einstellen der default-Zeit-Zonen-Einstellung über RDS
Wir haben vor kurzem wechselte zu einem RDS-Instanz und festgestellt, dass einige unserer Datenbank Aufgaben wurden immer ausgelöst, 4 Stunden früher als nötig. Auf die Untersuchung weiter, das problem wird verursacht durch die Standard-Zeit-zone-Einstellung (UTC) auf der RDS-Instanz. Da diese Einstellung kann nicht geändert werden, wir möchten, um das Problem zu beheben auf der code-Ebene weltweit über alle unsere Anwendungen mit Hilfe dieser Datenbank-Instanz. Ich versuchte, legen Sie die Zeitzone auf die db-instance erstellen ich, 'US/Eastern' mithilfe
set GLOBAL time_zone = 'US/Eastern'" OR
set time_zone = 'US/Eastern'"
Aber das erzeugt eine Fehlermeldung "Datenbank-Fehler: Unbekannte oder falsche Zeit-zone: 'US/Eastern'"
Was denkst du mache ich hier falsch? Wer hat noch weitere Lösungen ?
InformationsquelleAutor newbie | 2011-11-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Leider ist es nicht möglich, die default_timezone in der RDS-DB-ParameterGroups also dein Versuch war, die richtige Richtung schon.
Einstellen der global-Wert über die GLOBALE müssen Sie die SUPER-Berechtigung, die nicht erteilt wird, Sie als einen RDS-Benutzer.
Der einzige Weg, um die time_zone ist auf einer pro-Verbindung-basis
Auf meinem Rechner, die ich habe versucht, US/Eastern erfolgreich, aber ich habe einen ganz alten generation läuft.
Bestimmen, die Zeitzonen, die Sie zur Verfügung haben, melden Sie sich in Ihrem Feld
und geben
Sollten Sie sich eine Liste der installierten und gültigen timezone-Namen können Sie festlegen, auf die Instanz
Müssen Sie die time_zone jedes mal, wenn Sie eine Verbindung zu Ihrem Datenbank-server
Zum Beispiel, wenn Sie verwenden die php-Mysqli-Erweiterung, die Sie tun können diese
Sonst nur manuell ( in Bezug auf lassen Sie Ihre Datenbank-connector ) ausführen der
SET time_zone = '<YOUR_DESIRED_TIMEZONE>'
Abfrage rechts, nachdem Sie Sie angeschlossen haben, um Ihre DatenbankSET time_zone = 'US/Eastern'
zuSET time_zone = '-5:00'
dann können Sie vermeiden, das Problem von mySql nicht zu erkennen, Zeitzonen von Namen im RDS standardmäßig.Guter Punkt, danke für die Bestätigung.
vorsichtig mit Sommerzeit/summer time etc, wenn Sie verwenden Sie roh-Stunden-offsets
InformationsquelleAutor Michel Feldheim
Den time_zone Einstellung der RDS-Datenbank-instances können jetzt geändert werden: https://aws.amazon.com/de/premiumsupport/knowledge-center/rds-change-time-zone/
InformationsquelleAutor janpio
tldr;
Erstellen Sie eine "shared" - schema, dass alle Ihre Benutzer AUSFÜHREN, der Zugriff auf, erstellen Sie eine SPROC, das ändert die session-Zeitzone und ändern Sie die init_connect MySQL-parameter zu nennen.
Als Ryan Weir zeigte in seiner hervorragenden Antwort in eine doppelte Frage dies sollte wohl vermieden werden, wenn möglich. Wenn, jedoch, Sie sind wie ich und implementieren wollen, um es für die Bequemlichkeit und Vernunft dann nahm ich Ryan ' s Lösung und machte ein paar änderungen.
Wenn Sie mehrere Benutzer eingerichtet in MySQL mit unterschiedlichen Berechtigungen dann einfach, indem ich die sproc in der mysql-schema könnte dann Probleme haben. Um dieses Problem zu lösen schuf ich ein neues schema mit dem Namen "shared" und gab all meine Benutzer AUSFÜHREN, der Zugriff auf dieses schema. Dann habe ich die folgende gespeicherte Prozedur.
Ich lieber 'US/Pacific' zu behandeln Sommerzeit aber sollten Sie testen, um sicherzustellen, dass Ihre MySQL-Instanz erkennt ihn zuerst. Nur führen Sie die folgende Abfrage
SET SESSION time_zone = 'US/Pacific';
um sicherzustellen, dass es funktioniert. Zu suchen, bis Sie Ihre Zeitzone ausführenSELECT * FROM mysql.time_zone_name;
Ich an dieser Stelle empfehlen, dass das testen der Berechtigungen, bevor Sie gehen, ändern Sie die Parameter Gruppe und potential zu brechen alles. Schließen Sie einfach an die DB (am besten mit einem user, low-level-Berechtigungen und/oder Häufig verwendet wird), und führen Sie die folgenden Abfragen aus.
Hoffentlich haben Sie nicht alle Fehler und die richtige Zeit zeigte.
Nächstes müssen Sie die init_connect parameter im DB Parameter-Gruppe, dass der RDS-Instanz verwendet wird. Sie können dies tun, in der RDS-web-Konsole, über die API oder Befehlszeilen-Dienstprogramm. Wenn Sie die Befehlszeile verwenden, wird es wie folgt Aussehen:
Wenn Sie diese über die web-Konsole, dann müssen Sie nur ändern Sie den Wert von init_connect.
Gehen Sie zurück zu Ihrem RDS-Instanz in der web-Konsole und Blättern Sie in den Detailbereich nach unten, um die DB-Parameter-Gruppe. Es sollte etwas sagen wie (anwenden) oder (in-sync). Einmal ist es (in-sync) gehen und testen Sie alles aus, um sicherzustellen, gibt es keine Probleme.
Wenn an diesem Punkt Sie laufen in Probleme und müssen roll Dinge wieder, dann empfehle ich die Einstellung der init_connect Wert auf etwas harmloses wie:
Einstellung es wieder zu leeren ist unmöglich zu tun, von der web-Konsole. Siehe diesen thread für mehr details, warum man nicht wiederherstellen können, die leeren Wert für die DB-parameter
InformationsquelleAutor Thomas Paine
@Thomas Paine ' s Lösung funktioniert bei mir, außer dass ich hatte, um Benutzer
user()
stattcurrent_user()
im Rahmen derinit_connect
current_user() gibt den master-RDS-Benutzer. (Von Meister damit meine ich nicht rdsadmin das ist der eigentliche root-Benutzer, sondern der Benutzer erstellt mit dem DB-Instanz mit den meisten Privilegien.)InformationsquelleAutor Neo
Ich habe die folgenden Schritte, So dass ich ändern könnte, die Zeitzone
login RDS und Neue Parameter Gruppe.
Editieren Sie die neu erstellte Parameter-Gruppe
Set time_zone Ex:Asia/Calcutta und Speichern Sie die Änderungen
Ändern der RDS-Instanz, ändern, DB s-Parameter-Gruppe der neu erstellte parameter-Gruppe
Speichern Und Neustart RDS-Instanz
Sie versuchen im DB-Parameter-Gruppe, sollten Sie versuchen, die Cluster-Parameter-Gruppe.
InformationsquelleAutor Pbms