## 背景概述 在一次客戶的資料庫實例連接不上了,需要我們排查一下原因,通過查看資料庫實例進程已經不存在了,在錯誤日誌中沒有發現其他報錯信息,發現有`shutdown`的字樣出現,懷疑是某個用戶手動關閉了實例。我們通過以下測試,發現是由於用戶關閉了主機所導致的。 ## 問題復現 本次測試基於`Gre ...
背景概述
在一次客戶的資料庫實例連接不上了,需要我們排查一下原因,通過查看資料庫實例進程已經不存在了,在錯誤日誌中沒有發現其他報錯信息,發現有shutdown
的字樣出現,懷疑是某個用戶手動關閉了實例。我們通過以下測試,發現是由於用戶關閉了主機所導致的。
問題復現
本次測試基於GreatSQL 8.0.32-24
,通過以下測試瞭解不同情況下關閉資料庫實例後錯誤日誌會記錄哪些信息,之後可以通過錯誤日誌中的信息瞭解到資料庫實例是如何被關閉的。
1.正常關閉shutdown
mysql> shutdown;
查看錯誤日誌
2023-04-24T18:41:16.491010+08:00 504 [System] [MY-013172] [Server] Received SHUTDOWN from user root. Shutting down mysqld (Version: 8.0.32-24).
2023-04-24T18:41:28.657637+08:00 0 [System] [MY-010910] [Server] /greatsql/svr/mysql/bin/mysqld: Shutdown complete (mysqld 8.0.32-24) MySQL Community Server - GPL.
可以看到正常關閉實例時,會顯示是由哪個資料庫用戶執行的shutdown命令:SHUTDOWN from user root
2.kill關閉
通過kill命令關閉實例
shell> ps -ef | grep mysqld
shell> kill 22803 17012
查看錯誤日誌
2023-04-24T18:42:30.910121+08:00 0 [System] [MY-013172] [Server] Received SHUTDOWN from user <via user signal>. Shutting down mysqld (Version: 8.0.32-24).
2023-04-24T18:42:32.201306+08:00 0 [System] [MY-010910] [Server] /greatsql/svr/mysql/bin/mysqld: Shutdown complete (mysqld 8.0.32-24) MySQL Community Server - GPL.
可以看到通過kill命令關閉實例會顯示 SHUTDOWN from user <via user signal>
,不會顯示具體執行kill 的操作系統用戶
3.kill -9 關閉
通過kill -9關閉資料庫實例
shell> ps -ef | grep mysqld
shell> kill -9 11803 18712
查看錯誤日誌
# 錯誤日誌中不會顯示任何信息
如果資料庫實例進程不存在,並且錯誤日誌信息中沒有明顯的資料庫實例關閉的信息,可考慮資料庫實例是通過 kill -9
關閉的
4.主機reboot/shutdown
通過正常關閉主機,從而導致資料庫實例關閉
shell> reboot
查看錯誤日誌
2023-04-24T18:46:51.021426+08:00 0 [System] [MY-013172] [Server] Received SHUTDOWN from user <via user signal>. Shutting down mysqld (Version: 8.0.32-24).
2023-04-24T18:46:53.774795+08:00 0 [System] [MY-010910] [Server] /greatsql/svr/mysql/bin/mysqld: Shutdown complete (mysqld 8.0.32-24) MySQL Community Server - GPL.
可以看到通過正常關閉主機導致資料庫實例關閉會顯示 SHUTDOWN from user <via user signal>
,不會顯示具體執行關閉主機的的操作系統用戶
5.主機異常斷電
通過模擬主機異常斷電,從而導致資料庫實例關閉
# 對主機做斷電操作
查看錯誤日誌
# 錯誤日誌中不會顯示任何信息
如果資料庫實例進程不存在,並且錯誤日誌信息中沒有明顯的資料庫實例關閉的信息,可考慮資料庫實例是由於主機異常斷電關閉的。
總結
1.正常關閉資料庫實例時,錯誤日誌中會記錄是由那個資料庫用戶關閉的,如 SHUTDOWN from user root
2.通過 kill 命令關閉資料庫實例以及關閉主機(reboot/shutdown)導致資料庫實例關閉,錯誤日誌中會記錄 SHUTDOWN from user <via user signal>
,可通過history命令查看是否執行過 kill 操作或關閉主機的操作
3.通過kill -9 命令關閉資料庫實例以及主機異常斷電導致資料庫實例關閉,錯誤日誌中不會記錄導致資料庫實例關閉的信息,可通過history命令查看是否執行過 kill -9 操作
Enjoy GreatSQL