MySQL Server Time Zone Değişikliği
Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYuUXzrY' (Errcode: 28 - No space left on device) in /usr/share/nginx/html/syslogs/wp-includes/class-wpdb.php on line 2349
MySQL sunucusu başladığı zaman time zone olarak sistem saatini kullanır ve system_time_zone değişkenine atar. Bir nedenden ötürü MySQL'in zaman bilgisini sisteminkinden farklı bir time zone'a atamanız gerekirse bu işlemi global ve per-connection olmak üzere iki farklı şekilde yapabilirsiniz.
Global time zone MySQL sunucusunun default zaman bilgisini set ederken, per-connection time zone ise sadece ilgili session için zaman bilgisinin atanmasını sağlar; yani per-connection time zone özelliğini kullanarak aynı MySQL sunucusu üzerinde birden fazla uygulama için farklı zone'lar tanımlanabilir.
Örnek olarak global time zone değerini Istanbul'a göre set etmek için aşağıdaki şekilde bir komut kullanabilirsiniz:
mysql> SET GLOBAL time_zone = 'Europe/Istanbul';
Aynı şekilde o anki session'ın time zonu'unu Istanbul yapmak için komut aşağıdaki şekli ile kullanılabilir:
mysql> SET time_zone = 'Europe/Istanbul';
Hem global hem de per-connection time zone'unun ne olduğunu görüntülemek için de şu komutu çalıştırabilirsiniz:
mysql> SELECT @@global.time_zone, @@session.time_zone;
Örnek bir çıktı şu şekilde olacaktır:
+--------------------+---------------------+ | @@global.time_zone | @@session.time_zone | +--------------------+---------------------+ | Europe/Istanbul | Europe/Istanbul | +--------------------+---------------------+ 1 row in set (0.01 sec)
Yukarıdaki örneklerden hareketle time zone değişikliği yapmak istediğinizde şöyle bir hata almanız da olasıdır:
ERROR 1298 (HY000): Unknown or incorrect time zone: 'Europe/Istanbul'
Bu problemin nedeni mysql'de time zone bilgisinin ön tanımlı olarak tutulmuyor olmasıdır. Normalde kurulum sırasında mysql db'sinde time zone bilgilerinin tutulacağı tablolar oluşturulur ancak içleri boş bırakılır. Eğer zaman bilgisinde değişiklik yapmak isterseniz bu tablolara time zone bilgilerini sizin import etmeniz gerekir.
Time zone bilgileri mysql'e, işletim sisteminin kendi zoneinfo database'inden yararlanılarak, mysql_tzinfo_to_sql isimli programcık vasıtası ile import edilebilir.
RHEL (ve türevleri), Debian (ve türevleri), FreeBSD, Solaris vs. gibi *nix sistemlerde zoneinfo db'si /usr/share/zoneinfo dizininde tutulurlar. mysql_tzinfo_to_sql programcığı ise bu dizinde bulunan time zone bilgilerini mysql db'sine import etme işlevini görmektedir.
Import işlemi için şu şekilde yapılabilir:
# mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
Böylece ilgili zoneinfo database dizinindeki bilgiler SQL cümlelerine çevirilerek ilgili tablolara import edileceklerdir.
Import sonrası aşağıdaki select cümlesi ile örneğin Europe'la alakalı time zone bilgilerini listeyelebilirsiniz:
SELECT * FROM mysql.time_zone_name where name like '%Europe%'; +--------------------------+--------------+ | Name | Time_zone_id | +--------------------------+--------------+ | Europe/Amsterdam | 412 | | Europe/Andorra | 413 | | Europe/Athens | 414 | | Europe/Belfast | 415 | | Europe/Belgrade | 416 | | Europe/Berlin | 417 | | Europe/Bratislava | 418 | | Europe/Brussels | 419 | | Europe/Bucharest | 420 | | Europe/Budapest | 421 | | Europe/Chisinau | 422 | | Europe/Copenhagen | 423 | | Europe/Dublin | 424 | | Europe/Gibraltar | 425 | | Europe/Guernsey | 426 | | Europe/Helsinki | 427 |
Bu işlem sonrası time zone değişikliklerinde herhangi bir hata alınmayacaktır.
Konuyla ilgili daha detaylı bilgi için aşağıdaki linkten yararlanabilirsiniz:
http://dev.mysql.com/doc/refman/5.6/en/time-zone-support.html
Bu yazılar da ilginizi çekebilir:
- Komut Satırından MySQL Kullanıcısı Oluşturmak
- Mysql Server İçin Root Şifresi Tanımlamak
- MySQL Full-Text Search Minimum Length Limitini Değiştirmek
- Mysql Data Dizininin Yerinin Değiştirilmesi
- Mysql Replikasyon Yapılandırması
Yorumlar
Trackbacks
Yorumda bulunun.
Bir sürü abuk sabuk çözüm önerilerinden sonra yazınız ilaç gibi geldi. Mesela zoneinfo’nun import edilmesini anlatmasanız şu emek çöpe gidebilirdi. Anlatımınızda basit ve hemen anlaşılabilecek şekilde.
Herşey için teşekkürler.
[Cevapla]
Çözüm için teşekkürler.
Bu ayarları kalıcı yapmak için my.cnf dosyası içerisine aşağıdaki satırın girilmesi gerekiyor. Aksi halde mysql restart durumunda default configurasyona dönüyor.
[mysqld]
default-time-zone=’Europe/Istanbul’
[Cevapla]