web-dev-qa-db-ja.com

mysqlを再起動せずにMySQLの時刻をシステム時刻と同期させる方法は?

私のマシンには、システム時刻(タイムゾーンを含む)を同期するサービスがあり、DBがマシンの時刻とたまに同期するようにしたいと考えています。

SYSTEM時間を変更すると、MySQLはCURRENT_TIMESTAMP、MySQLサービスを再起動したときにのみ同期します。

質問したいのですが、サービスを再起動せずに、システム変数などを更新することで、DB時間をSYSTEM時間またはその他の時間に設定することは可能ですか?

DBを停止したくありません。たまに実行されるスケジュールされたタスクを設定できると思いますが、どうすればよいですか?

回答を受け入れるには、次のテストに合格する必要があります。

# change system time, date or timezone on the machine
select CURRENT_TIMESTAMP from dual; #--still show old time
call sync_time; #or some sync date + time + timezone commands... 
select CURRENT_TIMESTAMP from dual; #--will show updated time

Sync_timeプロシージャが必要です。これにより、最後の選択でマシンの日付と現地時間が表示されます。

@rathishDBAの回答はまったく役に立ちませんでした。MySQL変数のみを変更し、DB時間を同期しませんでした。 「root」ユーザーとして試してみましたが、最初と最後の両方の選択で同じ非同期結果が得られました。

たとえば、次の図を参照してください。 screen shot

System time = 2:07
CURRENT_TIMESTAMP = 11:37
2
SHR

この解決策は私にとってうまくいきました、あなたにとってもうまくいくことを願っています:

mysql> select now();
+---------------------+
| now()               |
+---------------------+
| 2017-10-26 15:13:16 |
+---------------------+
1 row in set (0.07 sec)

mysql> SET GLOBAL time_zone = 'SYSTEM';
Query OK, 0 rows affected (0.07 sec)

mysql> show global variables like '%time_zone%';
+------------------+---------------------+
| Variable_name    | Value               |
+------------------+---------------------+
| system_time_zone | India Standard Time |
| time_zone        | SYSTEM              |
+------------------+---------------------+
2 rows in set (0.18 sec)

mysql>

システムの再起動を回避するために、実行時にこの構成値を設定するには、SUPER特権が必要です。

1
Rathish

質問が理解できるかわかりません。タイムゾーンは起動時にのみ設定できることは正しいですが、SYSTEMを設定すると、時刻を取得する後続の呼び出しは単純に OSに渡される になります。したがって、MySQLで時間が変更されていないことがわかった場合、OSで変更しようとしていることは何もそのレベルでは適用されません。

簡単な ソースコードの参照 は、システム時間を取得するためのgettimeofday()の呼び出しを示しています。

0
Gaius