獲取 MySQL 啟動和關閉時間
如何在MySQL 5.7中編寫一個在數據庫啟動和關閉之前更新表的觸發器?
有什麼對我們有幫助的建議嗎?
啟動時間
對於所有執行 MySQL 5.7 的人
SELECT NOW() - INTERVAL variable_value SECOND MySQL_Started FROM performance_schema.global_status WHERE variable_name='Uptime';
對於任何執行 MySQL 5.6 及之前版本或MySQL 5.6 兼容模式下的 MySQL 5.7 的使用者
SELECT NOW() - INTERVAL variable_value SECOND MySQL_Started FROM information_schema.global_status WHERE variable_name='Uptime';
三 (3) 天前剛剛提到過這個(讓 MySQL 在每次啟動時列印一個時間戳)
停機時間
獲取關機時間的四種方法
方法#1:搜尋錯誤日誌
如果呼叫了錯誤日誌
error.log
,請執行此grep "Shutdown complete$" error.log | tail -1 | awk '{print $1,$2}'
這將產生日期 (
YYMMDD
) 和時間 (HH:MM:SS
)方法 #2:InnoDB 緩衝池
如果您配置了innodb_buffer_pool_dump_at_shutdown,請查找已寫入文件的時間戳。預設文件
ib_buffer_pool
名是. 前面提到過Dec 06, 2017
(Control InnoDB buffer pool allocation in MySQL (5.7+).Since)ib_buffer_pool
通常寫在文件夾 set bydatadir
中,關機後可以執行以下命令:cd /var/lib/mysql ls -l --time-style=+"%Y-%m-%d %H:%M:%S" ib_buffer_pool | awk '{print $6,$7}'
方法#3:二進制日誌
如果
mysql
啟用了二進制日誌,則獲取關閉後最後一個二進制日誌的時間戳。方法#4:錯誤日誌
您可能會說,“我不想查看錯誤日誌!!!”
你不必。只需在關機完成後獲取錯誤日誌的時間戳即可。
關機警告
如果 mysqld 崩潰,方法 #1 對您沒有任何好處。
其他三 (3) 種方法將簡單地告訴您 mysqld 上次執行任何類型的寫入,無論是完全關閉還是崩潰。
您的實際問題
首先,不需要觸發器,也不會在關機時觸發。
當 mysqld 關閉時,您不能將關閉時間寫入表。
我可以建議的最好方法是使用上述四 (4) 種方法之一擷取關閉日期時間並將其寫入腳本。您可以按如下方式執行該腳本:
創建一個名為
/var/lib/mysql/startup_stuff.sql
跑
chown mysql:mysql /var/lib/mysql/startup_stuff.sql
以將日期時間寫入表的方式在該腳本中寫入
將此行添加到(請參閱有關init-file 的
/etc/my.cnf
MySQL 文件)init-file=`/var/lib/mysql/startup_stuff.sql
使用啟動mysql
service mysqld start
“之前”啟動——嗯,
TRIGGERs
顯然不能在MySQL執行之前執行。關機前——好吧,如果伺服器崩潰(由於錯誤或電源故障),則無法啟動任何程式碼。
在任何時候,您都可以通過
NOW()
從啟動中獲取並減去秒數來獲得“啟動”時間:SHOW STATUS LIKE 'Uptime';
.mysql> SELECT NOW() - INTERVAL variable_value SECOND FROM information_schema.GLOBAL_STATUS WHERE variable_name = 'Uptime'; +----------------------------------------+ | NOW() - INTERVAL variable_value SECOND | +----------------------------------------+ | 2018-03-21 05:36:50.000000 | +----------------------------------------+ 1 row in set (0.00 sec)
(您的標題和描述提出了不同的問題!)