MySQL und die time_zone

1405_mysql

Zeit ist relativ, das wusste  schon Albert Einstein. Was aber wenn Server und Datenbank sich einfach nicht auf eine Zeit einigen können? 

Kurz zum Hintergrund, ich habe einen Ubuntu Server 12.04 LTS aufgesetzt und später das LAMP-Packet nachinstalliert und dabei alle Einstellungen default gelassen, was die Zeitzonen betrifft. Denn Default nutzt MySQL die Systemzeit und somit sollte alles klappen. Hat es aber leider nicht, die Datenbank hing immer zwei Stunden hinterher.

Unter Ubuntu gibt man in der bash einfach den Befehlt date an und sieht was eingestellt ist. Da hier die Zeit stimmte und als Zeitzone CEST, also Mitteleuropäische Sommerzeit, eingestellt war überprüfte ich den Datenbankserver. Hierfür wird in der MySQL-Konsole folgendes eingegeben:

SELECT @@global.time_zone;

Steht dort SYSTEM ist alles in bester Ordnung, denn so eingestellt verwendet MySQL die Systemzeit des Hostsystems. Bei mehreren zeitkritischen Systemen sollte man einen Taktgeber auswählen und alle anderen Systeme nach diesem stellen. Unter Ubuntu habe ich die Zeitzone CEST bzw. „Europe/Berlin“ eingestellt somit sollte in der Datenbank das selbe Datum gelten.

Aber weit gefehlt, denn die Standard LAMP-Installation importiert keinerlei Zeitzonen in die mysql Datenbank somit versucht Sie die Systemzeit zu verwenden, kann aber mit CEST nichts anfangen und wählt somit den default UTC, welcher im Sommer ja zwei Stunden zurück liegt. Als Lösung bietet MySQL auf Linux-Systemen einen Import der Zeitzonen mit einem „einfachen“ bash Befehlt an:

mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql

Aufgepasst! Hat man bei der Installation von MySQL, wie empfohlen, das root-Passwort gesetzt muss die option -p angehängt werden! Möchte man das Passwort gleich mit übergeben, wird es direkt ohne Leerzeichen an den Parameter angehängt, etwa so: -pmysecurepassword

Nachlesen kann man die Einstellungen nochmal auf mysql.com

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.