CentOS はシステムと MySQL に対して同じ日付とタイムゾーンを定義します。

CentOS はシステムと MySQL に対して同じ日付とタイムゾーンを定義します。

私はDigital Oceanの一部のDropletがオペレーティングシステムとMySQLの間に異なる時間帯を持っていることに気づきました。デフォルトでは、すべての仮想マシンがブラジルのタイムゾーン(アメリカ/サンパウロ)で構成され、tzselectMySQLがシステムのデフォルトのタイムゾーンを使用していると仮定しました。

したがって、現在のタイムスタンプを入力すると、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

問題はすぐに修正されました。再起動は必要ありません!良い測定のためにキャッシュなどをクリアしました。

関連情報