私はDigital Oceanの一部のDropletがオペレーティングシステムとMySQLの間に異なる時間帯を持っていることに気づきました。デフォルトでは、すべての仮想マシンがブラジルのタイムゾーン(アメリカ/サンパウロ)で構成され、tzselect
MySQLがシステムのデフォルトのタイムゾーンを使用していると仮定しました。
したがって、現在のタイムスタンプを入力すると、CentOSは次の結果を得ます。
date
Thu Jun 9 09:43:03 BRT 2016
そしてMySQLでは:
mysql> select current_timestamp;
+---------------------+
| current_timestamp |
+---------------------+
| 2016-06-09 12:45:57 |
+---------------------+
1 row in set (0.00 sec)
mysql>
文書を読むMySQL 5.5、タイムゾーンを文字列として使用するオプションがあります。たとえば、'America/Sao_Paulo'
CentOS 6.5にはMySQL 5.1が付属しており、+3:00のように時間だけを使用するのと同じオプションはありません。私はシステムにMySQLの日付/時刻を設定したので、MySQLの日付/時刻を心配する必要はないと確信しています。
私が作成したCentOSタイムゾーンの設定:
tzselect
私はMySQLがこの設定を採用すると思い、ブラジルのタイムゾーンを設定するためにコマンドを使用しました。再起動後、システムがtzselectから私の設定を削除したことに気づきました。これを防ぐために、次の行を入力しました/etc/rc.local
。
ln -sf /usr/share/zoneinfo/America/Sao_Paulo /etc/localtime
この構成を使用しても、一部のVMはUTCであり、他のVMはBRTであることがわかります。現時点では、すべてのサーバーを同じ方法で構成する方法がわかりません。最低40台のシステムです。
誰かがシステムのタイムゾーンとMySQLのタイムゾーンを正しく設定する方法を説明するのに役立ちますか?
追加情報
システム:CentOS 6.5 x64 MySQL:5.1(デフォルト)
@leseが要求したコマンドは次のとおりです。
mysql> SELECT @@global.time_zone, @@session.time_zone;
+--------------------+---------------------+
| @@global.time_zone | @@session.time_zone |
+--------------------+---------------------+
| SYSTEM | SYSTEM |
+--------------------+---------------------+
1 row in set (0.00 sec)
mysql> select current_timestamp;
+---------------------+
| current_timestamp |
+---------------------+
| 2016-06-09 14:31:19 |
+---------------------+
1 row in set (0.00 sec)
mysql> exit
Bye
$ date
Thu Jun 9 11:31:22 BRT 2016
/etc/sysconfig/clock
ファイルのマシン時間は次のとおりです。
[root@xxxx]# cat /etc/sysconfig/clock
ZONE=Etc/UTC
ありがとうございます。
答え1
問題を発見しましたが、
tzselect
タイムゾーンを選択しましたが、/etc/sysconfig/clockが付属しており、システムZONE=America/New_York
の日付/時刻情報を使用するシステムとアプリケーションでいくつかのエラーが発生しました。この問題を解決し、BIOS クロックをシステム クロックと同期したままにするには、次の手順に従います。
sudo vim /etc/sysconfig/clock
ZONE="America/Sao_Paulo"
UTC=true
ARC=false
その後、システムを再起動します。
sudo reboot
default_time_zone
(CentOSの/etc/my.cnf
場合)または(Ubuntuベースのオペレーティングシステムの場合)不要なタイムゾーンパラメータを/etc/mysql/my.cnf
削除します。
その後、MySQLサーバーインスタンスを再起動します。
sudo /etc/init.d/mysqld restart
最後に、すべての設定が正しいことを確認するには、次のコマンドを使用します。
mysql> select current_timestamp;
+---------------------+
| current_timestamp |
+---------------------+
| 2016-06-09 15:18:32 |
+---------------------+
1 row in set (0.00 sec)
mysql> exit
Bye
[carlos@xxxx-setup ~]$ date
Thu Jun 9 15:18:34 BRT 2016
[carlos@xxx-setup ~]$
@ leseさんの関心に感謝します。
答え2
私は古い投稿を削除するのが嫌いですが、この情報を投稿できる唯一の場所はここのようです。 CentOS 7では、デフォルトのMariaDB 10設定(CentOS標準rpmを使用)でタイムゾーンファイルの場所が正しくありません。タイムゾーン情報をMySQLに依存するアプリケーションで問題が発生しました。アプリケーションがどの設定を使用しても、常にUTCタイムゾーン時間を返します。
これ:
mysql_tzinfo_to_sql /usr/share/zoneinfo/right |mysql -u root mysql -p
問題はすぐに修正されました。再起動は必要ありません!良い測定のためにキャッシュなどをクリアしました。