Mysql

如何在不重啟mysql的情況下將MySQL的時間與系統時間同步?

  • December 18, 2018

在我的機器上,我有一項服務來同步系統時間(包括時區),並且希望數據庫偶爾與機器時間同步。

當我更改SYSTEM時間時,MySQL在我使用時一直給出舊時間CURRENT_TIMESTAMP,只有在我重新啟動MySQL服務時才會同步它。

我想問:是否有可能通過更新一些系統變數或其他任何東西來設置數據庫時間,等於系統時間或任何其他時間,而無需重新啟動服務?

我根本不想停止數據庫。我認為也許可以設置一個偶爾執行一次的計劃任務,但它應該怎麼做呢?

要接受答案,它必須通過以下測試:

# 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 變數,而不是同步數據庫時間。我以“root”使用者身份嘗試過,第一次和最後一次選擇都給了我相同的不同步結果。

例如看這張圖: 截屏

System time = 2:07
CURRENT_TIMESTAMP = 11:37

這個解決方案對我有用,我希望它也對你有用:

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在執行時設置此配置值的權限以避免系統重新啟動。

我不確定我是否理解這個問題;你是正確的,你只能在啟動時設置時區,但如果你設置SYSTEM了,那麼這意味著任何後續的獲取時間的呼叫都將簡單地傳遞給 OS。因此,如果您看到 MySQL 中的時間沒有變化,那麼您在作業系統中所做的任何更改都不會應用於該級別。

快速瀏覽原始碼gettimeofday()會顯示獲取系統時間的呼叫。

引用自:https://dba.stackexchange.com/questions/189368